event.preventDefault() 第一次单击然后删除

问题描述 投票:0回答:5

如果默认锚点有一个类子导航,如this fiddle所示,我会禁用它。

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

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

也许像这样的伪代码?

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

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

jquery preventdefault
5个回答
10
投票

这个效果很好。 第二次点击进入页面...

$(".smallNavigation > ul > li > a").click(function (e) {

    $("ul.sub-menu").hide();
    $("ul.sub-menu", $(this).parent("li")).show();

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

}

9
投票

将事件处理程序与

one()
docu 绑定。它执行一次,然后自动解绑。

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

或者您可以直接在函数中自行解绑。为此使用命名空间是很好的

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

7
投票

您可以将

false
传递给 one():

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

传递

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

这在 bind() 的文档中进行了解释:

在 jQuery 1.4.3 中,您现在可以传入

false
来代替事件 处理程序。这将绑定一个事件处理程序,相当于:
function() {
  return false; }


1
投票

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

类似

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

修改小提琴


0
投票

这对你有用

$("#elementid").bind("click", function( event ) {
  alert("This will be displayed only once.");
  event.preventDefault(); 
  $(this).unbind( event );
});
© www.soinside.com 2019 - 2024. All rights reserved.