首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JQuery切换在第一次单击时起作用,但不会再次起作用(如预期)

JQuery切换在第一次单击时起作用,但不会再次起作用(如预期)
EN

Stack Overflow用户
提问于 2012-02-02 20:03:29
回答 1查看 798关注 0票数 3

我正在创建一个div,它通过单击另一个元素来显示(切换)。

它应该在我单击锚点(#toggle-contents)时显示,如果我单击相同的锚点或文档中的其他位置,则隐藏。

我遵循了how-to中的代码:Creative overlay/popup with jQuery

它目前在第一次被点击时就可以工作了,但之后不久它就会显示并隐藏起来。

标记:

代码语言:javascript
复制
<div id="block-header">
    <a id="trigger-contents">Toggle</a>
  </div>
  <div id="block-contents">
  </div>

javascript:

代码语言:javascript
复制
function registerToggleDiv( trigger, toggle )
{
  $( '#' + trigger ).click(function() 
    {
      $( '#' + toggle ).toggle(function() 
      {
        console.log('toggle');
        $(document).click(function(event) 
        {
          if ( !($(event.target).is('#' + toggle ) || 
                $(event.target).parents('#' + toggle ).length || 
                $(event.target).is( '#' + trigger ))) 
          {
            console.log('toggle hide');
            $('#' + toggle ).hide(500);
          }
        });
      });
    });
}
registerToggleDiv( 'trigger-contents', 'block-contents' );

我试着在这里找出与其他切换问题相比的错误,但没有找到任何提示。

谢谢你的任何提示!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-02 20:26:12

当您单击trigger时,将发生传播并触发document onclick

您正在绑定到document onclick事件:

代码语言:javascript
复制
$('#' + toggle ).hide(500);

您应该停止在被点击的元素中的传播,以防止文档点击,如下所示:

代码语言:javascript
复制
$( '#' + trigger).click(function(e){
    e.stopPropagation();
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9111994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档