7

如果默认锚具有此 fiddle中所示的类 subnav,我将禁用它。

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

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

也许像这样的伪代码?

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

还是有更好的方法来解决这个问题?

4

5 回答 5

9

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

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

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

$(".subnav a").bind("click.myclick", function(event) {
  event.preventDefault();
  $(this).unbind(".myclick");
});
于 2012-08-02T07:34:23.747 回答
9

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

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

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

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

}
于 2015-12-30T22:12:53.750 回答
7

您可以传递falseone()

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

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

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

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

于 2012-08-02T07:37:30.173 回答
1

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

就像是

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

修改过的小提琴

于 2012-08-02T07:38:41.537 回答
0

这对你有用

$("#elementid").bind("click", function( event ) {
  alert("This will be displayed only once.");
  event.preventDefault(); 
  $(this).unbind( event );
});
于 2012-08-02T07:36:32.503 回答