Jquery 如何使按钮可以点击一次?
可能重复:Jquery 如何使按钮可以点击一次?,jquery,Jquery,可能重复: 我试图使用live将单击事件分配给按钮,希望用户只能触发一次。有办法吗 //I only want the alert show once and disable the click event... $('#testBtn').live('click', function(){ alert('hey ya'); }) 请注意:按钮是动态创建的。您可以使用以下功能: $('#testBtn').one('click', function(){ alert('he
我试图使用live将单击事件分配给按钮,希望用户只能触发一次。有办法吗
//I only want the alert show once and disable the click event...
$('#testBtn').live('click', function(){
alert('hey ya');
})
请注意:按钮是动态创建的。您可以使用以下功能:
$('#testBtn').one('click', function(){
alert('hey ya');
})
$('#testBtn').one('click', function(){
alert('hey ya');
})
演示:使用one()
:
希望这有帮助
编辑:如果您绝对想使用“live”:
$('#testBtn').live('click', function() {
$(this).die('click');
alert('hey ya');
});
如果要使用“one”,只需在生成动态对象并将其附加到文档后运行第一个代码段
如果您使用的是“live”类型的方法,但我建议您使用“on”,因为live已不推荐使用:
$(document).on('click', '#testBtn', function() {
$(this).die('click');
alert('hey ya');
});
可以使用“取消绑定”删除所有单击事件:
$('#testBtn').unbind('click');
$('#testBtn').unbind('live');
您也可以将one()
与委托处理程序一起使用(在jQuery 1.7+中),并用以下内容替换不推荐使用的live()
函数:
$(document).one('click', '#testBtn', function(){
alert('hey ya');
});
将
文档
替换为最接近的非动态父文档。您可以用这种方式来完成,这种方式可能运行得最快。。要向jsperf.com查询吗
$('#testBtn').bind('click', function() {
$(this).unbind('click');
alert('Clicked and unbound!');
});
编辑:我认为这是运行最快的3个测试用例-
运行2-3次以获得最佳结果。。每次我运行它时,bind都是最快的,其中一个会慢3%。在这个页面上已经有了更合理的答案,但是如果你坚持使用
.live()
而不是one()
,那么这将满足你的要求
//I only want the alert show once and disable the click event...
$('#testBtn').live('click', function(){
$(this).die('click');
alert('hey ya');
});
.die('click')
将删除click事件处理程序,因此它不会再次启动。最好的选择是使用.one而不是live按钮。这更有道理。。
如果不想使用它,则可以在页面中使用Hiddenfield,并在触发click事件时设置标志值
下次单击按钮检查标志值时,如果已经执行过一次,则不要在其中运行代码
检查这个例子
还要注意,当前jQuery版本中不推荐使用.live。最好使用.on()来代替看看这个,请更新您的问题,以清楚地表明您正在使用live,因为元素是动态创建的。我在这里为您收集了最快的测试用例-这对于通过
live()
连接的处理程序不起作用;你想要die()
。如果使用动态元素,它将完全像这样工作,一点也不?我不能使用.one,因为我有.live方法。有什么办法吗?@Rouge-请看下面我的答案@阿德内奥-你能引用他在问题中说他需要授权,或使用动态元素的地方吗。我的眼睛不能再像以前那样了,因为我一辈子都找不到了!我认为这在很大程度上是通过使用live()实现的。live和testBtn是动态生成的……如果它不能与动态元素一起工作,那么它的速度有多快都无关紧要?为什么不呢?您所要做的就是将绑定更改为live,您仍然可以取消绑定事件。此外,如果您希望动态且快速,我只会使用普通的JavaScript和addEventListener(“单击”)。生存和死亡是测试用例中运行最慢的。嗯,你在比较苹果和桔子!您正在将您的答案与根本无法使用动态元素的bind()
与one()
和live()
的委托版本进行比较!当然,委托的处理程序会变慢,但如果更快的bind()
方法根本无法处理动态元素,那么这并不是一个真正的问题。这将适用于动态创建的元素(我的答案在本例中不起作用),而且,这似乎是@Rouge想要实现的。谢谢+1。如果testBtn是一个类呢。如果我在一个函数中使用class,它似乎不起作用。这使用id选择器(
),只需将其替换为class选择器(
):.testBtn
@Rouge这是正确的答案!!
//I only want the alert show once and disable the click event...
$('#testBtn').live('click', function(){
$(this).die('click');
alert('hey ya');
});