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');
});