jQuery 显示和隐藏 div

发布于 2024-11-02 19:03:06 字数 1131 浏览 5 评论 0原文

当我单击页脚中的链接时,我尝试使用 jQuery 显示和隐藏两个覆盖 DIV(请参阅下面的标记)。如果我单击其中一个链接,jQuery 将按预期运行:它会隐藏另一个覆盖层并显示与我单击的链接相匹配的 DIV。如果我单击“条款和条件”,然后再次单击“条款和条件”,它会隐藏 DIV,然后再次显示相同的 DIV。如果 DIV 已经可见,我想隐藏它。 (我最初尝试了 .toggle,行为是相同的。)

页脚中的链接:

<a href="#terms">Terms and Conditions</a>
<a href="#privacy">Privacy Policy</a>

HTML 中的 DIV:

<div class="meta" id="terms">Terms and Conditions</div>
<div class="meta" id="privacy">Privacy Policy</div>

jQuery:

$('footer a').click(function(e){
    $('.meta').hide();
    var div_to_show = $(this).attr('href');
    if($(div_to_show).is(':visible')) {
        // hide corresponding div if it's visible
        $(div_to_show).hide('fast');
    } else {
        // show corresponding div if it's not visible
        $(div_to_show).show('fast');
    }
    e.preventDefault();
});

这有效:

if($(this.hash).is(':visible')) {
    $('.meta').hide('fast');
} else {
    $('.meta').hide('fast');
    $(this.hash).show('fast');
}
e.preventDefault();

I'm trying to use jQuery to show and hide two overlay DIVs when I click on links in the footer (see markup below). The jQuery behaves as expected if I've clicked on one of the links: it hides the other overlay and shows the DIV that matches the link I clicked on. If I click on Terms and Conditions and then click on Terms and Conditions again, it hides the DIV and then shows the same DIV again. I want to hide the DIV if it's already visible. (I initially tried .toggle and the behavior was the same.)

Links in the footer:

<a href="#terms">Terms and Conditions</a>
<a href="#privacy">Privacy Policy</a>

DIVs in the HTML:

<div class="meta" id="terms">Terms and Conditions</div>
<div class="meta" id="privacy">Privacy Policy</div>

jQuery:

$('footer a').click(function(e){
    $('.meta').hide();
    var div_to_show = $(this).attr('href');
    if($(div_to_show).is(':visible')) {
        // hide corresponding div if it's visible
        $(div_to_show).hide('fast');
    } else {
        // show corresponding div if it's not visible
        $(div_to_show).show('fast');
    }
    e.preventDefault();
});

This worked:

if($(this.hash).is(':visible')) {
    $('.meta').hide('fast');
} else {
    $('.meta').hide('fast');
    $(this.hash).show('fast');
}
e.preventDefault();

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

微暖i 2024-11-09 19:03:06

在检查单击的链接的关联 div 是否为 :visible 之前,您将隐藏这两个 div。

You're hiding both divs before checking if the clicked link's associated div is :visible.

堇年纸鸢 2024-11-09 19:03:06

正确的方法是:

var $meta = $('.meta');
$('footer a').click(function(e){
    var $div = $($(this).attr('href'));
    $meta.not($div).hide();
    $div.toggle('fast');
    return false;
});
  • 使用 .toggle()
  • 缓存 jQuery 选择器适当的

演示

The right way to do it:

var $meta = $('.meta');
$('footer a').click(function(e){
    var $div = $($(this).attr('href'));
    $meta.not($div).hide();
    $div.toggle('fast');
    return false;
});
  • Use .toggle()
  • Cache jQuery selectors when appropriate

Demo

感受沵的脚步 2024-11-09 19:03:06

为什么不设置一个可见的标志?

var isVisible = false;
$('footer a').click(function(e){
    $('.meta').hide();
    var div_to_show = $(this).attr('href');
    if(isVisible) {
        // hide corresponding div if it's visible
        $(div_to_show).hide('fast');
    } else {
        isVisible = true;
        $(div_to_show).show('fast');
    }
    e.preventDefault();
});

Why don't you set a visible flag?

var isVisible = false;
$('footer a').click(function(e){
    $('.meta').hide();
    var div_to_show = $(this).attr('href');
    if(isVisible) {
        // hide corresponding div if it's visible
        $(div_to_show).hide('fast');
    } else {
        isVisible = true;
        $(div_to_show).show('fast');
    }
    e.preventDefault();
});
梦醒灬来后我 2024-11-09 19:03:06

这是显示隐藏 div 的代码...

JsFiddle

$(document).ready(function () {
    $("#message_div").hide();
    //attach click event to buttons
    $('.button-show').click(function () {

        /**
         * when show button is clicked we call the show plugin
         * which scales the box to default size
         * You can try other effects from here: http://jqueryui.com/effect/
         */
        $("#message_div").show();

    });

    $('.button-hide').click(function () {

        //same thing happens except in this case we hide the element
        $("#message_div").hide();

    });
});

和 template/html 文件中。

<div id="message_div" style="width:80%; margin:0 auto; color:black;">
    <h1> This is Div One </h1>
    <p>  Your Content</p>
 <br />
<input type="button" value="Discard" class="button-hide" />
 <br />
</div>
<div style="width:80%; margin:0 auto; color:black; margin-top:25px">
<input type="button" value="Send Message" class="button-show"  />   
</div>
<div style="width:80%; margin:0 auto; margin-top:25px">
    <h1>This is Div Two</h1>
<p>Your Content</p>
</div>

Here is the code to show hide divs...

JsFiddle

$(document).ready(function () {
    $("#message_div").hide();
    //attach click event to buttons
    $('.button-show').click(function () {

        /**
         * when show button is clicked we call the show plugin
         * which scales the box to default size
         * You can try other effects from here: http://jqueryui.com/effect/
         */
        $("#message_div").show();

    });

    $('.button-hide').click(function () {

        //same thing happens except in this case we hide the element
        $("#message_div").hide();

    });
});

and in the template/html file.

<div id="message_div" style="width:80%; margin:0 auto; color:black;">
    <h1> This is Div One </h1>
    <p>  Your Content</p>
 <br />
<input type="button" value="Discard" class="button-hide" />
 <br />
</div>
<div style="width:80%; margin:0 auto; color:black; margin-top:25px">
<input type="button" value="Send Message" class="button-show"  />   
</div>
<div style="width:80%; margin:0 auto; margin-top:25px">
    <h1>This is Div Two</h1>
<p>Your Content</p>
</div>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文