2012-08-02 111 views
6

我有默认的锚停用,如果它有一个类subnav如this fiddle所示。event.preventDefault()第一次点击,然后删除

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

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

也许这样的伪代码?

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

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

回答

5

工作,你可以通过falseone()

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

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

这说明文档中解释了bind()

在jQuery的1.4.3现在您可以在false传递发生的事件 处理程序。这将绑定相当于以下项目的事件处理程序:function() { return false; }

+0

这比我所感谢的要简单得多。对于记录,我使用$(“ul> .subnav> a”)。one(“click”,false);所以它只会影响到这个级别而不是子级。 – ak85 2012-08-03 01:35:01

+0

检查了这个http://css-tricks.com/return-false-and-prevent-default/理论上听起来很理想,但是当我尝试这个时,我不得不双击以获得点击事件触发: -/ – 2015-01-21 01:00:18

8

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

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

或者,您可以直接在函数中解除绑定。这是很好的使用命名空间为

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

命名空间的概念帮助我..感谢分享好想法。 – Amol 2015-06-22 14:22:43

0

这会为你

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

你可以像点击处理程序中的自解除绑定一样简单。

喜欢的东西

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

Modified fiddle

5

这种运作良好。第二次点击进入页面...

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

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

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

} 
+0

这帮了我!特别。 'e.preventDefault(); $(this).unbind(e); '谢谢 – breezy 2016-05-13 17:46:26

相关问题