【问题标题】:event.preventDefault() on first click then removeevent.preventDefault() 在第一次点击然后删除
【发布时间】:2015-12-31 06:12:53
【问题描述】:

如果默认锚具有 this fiddle 中所示的类子导航,我将禁用默认锚。

我只想在第一次点击时禁用此功能,然后我希望恢复正常的锚点功能。做这个的最好方式是什么?我尝试了一些涉及以下代码的方法,但这似乎不起作用?

  $(this).unbind(event.preventDefault());

可能是这样的伪代码?

if (click count === 0 ) {
    event.preventDefault();
}

或者有没有更好的方法来解决这个问题?

【问题讨论】:

    标签: jquery


    【解决方案1】:

    将事件处理程序与one()docu 绑定。它执行一次,之后自动解除绑定。

    $(".subnav a").one("click", function(event) {
      event.preventDefault();
    });
    

    或者,您可以直接在函数中自行取消绑定。最好为此使用命名空间

    $(".subnav a").bind("click.myclick", function(event) {
      event.preventDefault();
      $(this).unbind(".myclick");
    });
    

    【讨论】:

      【解决方案2】:

      这很好用。第二次点击进入页面...

      $(".smallNavigation > ul > li > a").click(function (e) {
      
          $("ul.sub-menu").hide();
          $("ul.sub-menu", $(this).parent("li")).show();
      
          e.preventDefault();
          $(this).unbind(e);
      
      }
      

      【讨论】:

      • 这对我有帮助!具体来说。 e.preventDefault(); $(this).unbind(e); 谢谢
      【解决方案3】:

      您可以将false 传递给one()

      $(".subnav a").one("click", false);
      

      传递false而不是处理程序相当于传递一个返回false的处理程序,有效地停止事件的传播并防止其默认行为。

      bind() 的文档中对此进行了解释:

      在 jQuery 1.4.3 中,您现在可以传入 false 来代替事件 处理程序。这将绑定一个事件处理程序,相当于:function() { return false; }

      【讨论】:

      • 这比我感谢的要简单得多。作为记录,我使用了 $("ul > .subnav > a").one("click", false);这样它只会影响那个级别而不是孩子。
      • 检查一下css-tricks.com/return-false-and-prevent-default,理论上这听起来很理想,但是当我尝试这样做时,我必须双击才能触发点击事件:-/
      【解决方案4】:

      您可以在点击处理程序中使用像 self unbind 这样简单的东西。

      有点像

      function stopEventOnce(event) {
        event.preventDefault();
        $(this).unbind('click',stopEventOnce);
        return false;
      }
      $(".subnav a").bind('click', stopEventOnce);
      

      Modified fiddle

      【讨论】:

        【解决方案5】:

        这对你有用

        $("#elementid").bind("click", function( event ) {
          alert("This will be displayed only once.");
          event.preventDefault(); 
          $(this).unbind( event );
        });
        

        【讨论】:

          猜你喜欢
          • 2017-05-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-17
          • 1970-01-01
          • 1970-01-01
          • 2017-07-03
          • 2011-06-08
          相关资源
          最近更新 更多