3

可能重复:
单击事件触发后,如何删除事件处理程序?

我正在尝试使用 live 将点击事件分配给按钮,并希望用户只能触发一次。有什么办法吗?

//I only want the alert show once and disable the click event... 
$('#testBtn').live('click', function(){
    alert('hey ya');
})

请注意:按钮是动态创建的。

4

8 回答 8

7

您也可以使用one()委托处理程序(在 jQuery 1.7+ 中)并将已弃用的live()函数替换为以下内容:

$(document).one('click', '#testBtn', function(){
    alert('hey ya');
});

替换document为最近的非动态父级。

于 2012-09-05T16:03:53.987 回答
4

您可以使用one功能:

$('#testBtn').one('click', function(){
    alert('hey ya');
})

演示:http: //jsfiddle.net/SEjYK/

于 2012-09-05T16:02:45.207 回答
0

使用one()

$('#testBtn').one('click', function(){
    alert('hey ya');
})
于 2012-09-05T16:02:48.680 回答
0
$('#testBtn').one('click', function() {
    alert('hey ya');
});

希望这可以帮助!

编辑:如果您绝对想使用“现场”:

$('#testBtn').live('click', function() {
    $(this).die('click');
    alert('hey ya');
});

如果您想使用“一个”,只需在生成动态对象并将其附加到文档后运行第一个代码片段。

如果您使用的是“live”类型的方法,但我建议使用“on”,因为 live 已被弃用:

$(document).on('click', '#testBtn', function() {
    $(this).die('click');
    alert('hey ya');
});
于 2012-09-05T16:03:25.837 回答
0

你可以这样做,这可能是运行速度最快的..去 jsperf.com 检查

$('#testBtn').bind('click', function() {
       $(this).unbind('click');
       alert('Clicked and unbound!');
});​

http://jsfiddle.net/usZSU/

编辑:我认为这是运行最快的添加 3 个测试用例 - http://jsperf.com/one-event 运行 2-3 次以获得最佳结果.. 每次我运行它时,绑定速度最快,一个慢 3% .

于 2012-09-05T16:16:24.380 回答
0

此页面上已经有更明智的答案,但是如果您坚持使用.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')将删除单击事件处理程序,因此它不会再次触发。

于 2012-09-05T16:19:47.280 回答
0

最好的选择是使用 .one 而不是 live 作为按钮。这更有意义.. 如果您不想使用它,那么您可以在页面中使用 Hiddenfield,并在触发点击事件时设置标志值..

下次单击按钮时检查标志值,如果它已经执行过一次,则不要运行其中的代码..

检查这个例子 http://jsfiddle.net/sushanth009/Fakb5/

另请注意 .live 在当前的 jQuery 版本中已被弃用。最好使用 .on() 代替

于 2012-09-05T16:47:55.713 回答
-1

您可以使用 unbind 删除所有点击事件:

 $('#testBtn').unbind('click');
 $('#testBtn').unbind('live');
于 2012-09-05T16:03:36.397 回答