JQuery Toggle 在第一次单击时有效,但不再有效(如预期)

发布于 2025-01-01 23:32:45 字数 1186 浏览 0 评论 0原文

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

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

我正在遵循此操作方法中的代码: 创意叠加/popup 与 jQuery

它目前正在第一次被点击时工作,但不久之后它就会显示和隐藏。

标记:

<div id="block-header">
    <a id="trigger-contents">Toggle</a>
  </div>
  <div id="block-contents">
  </div>

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' );

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

感谢您的任何提示!

I'm creating a div which is shown(toggled) by clicking on another element.

It should be shown when i click an anchor(#toggle-contents) and hidden if i click on the same anchor or somewhere else in the document.

I'm following the code in this how-to: Creative overlay/popup with jQuery.

It is currently working for the first time it's clicked, - but then it gets displayed and hidden shortly afterwards.

The markup:

<div id="block-header">
    <a id="trigger-contents">Toggle</a>
  </div>
  <div id="block-contents">
  </div>

The 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' );

I tried to find to error comparing to other toggle-questions here but didn't find any hint.

Thank you for any hints!

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

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

发布评论

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

评论(1

鱼忆七猫命九 2025-01-08 23:32:45

当您点击trigger时,就会发生传播并且文档onclick将会触发。

您正在绑定到文档 onclick 事件:

$('#' + toggle ).hide(500);

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

$( '#' + trigger).click(function(e){
    e.stopPropagation();
});

When you click on trigger, propagation will happen and document onclick will fire.

You are binding to document onclick event :

$('#' + toggle ).hide(500);

you should stop propagation in clicked element to prevent document click as below :

$( '#' + trigger).click(function(e){
    e.stopPropagation();
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文