可能重复:
单击事件触发后,如何删除事件处理程序?
我正在尝试使用 live 将点击事件分配给按钮,并希望用户只能触发一次。有什么办法吗?
//I only want the alert show once and disable the click event...
$('#testBtn').live('click', function(){
alert('hey ya');
})
请注意:按钮是动态创建的。
可能重复:
单击事件触发后,如何删除事件处理程序?
我正在尝试使用 live 将点击事件分配给按钮,并希望用户只能触发一次。有什么办法吗?
//I only want the alert show once and disable the click event...
$('#testBtn').live('click', function(){
alert('hey ya');
})
请注意:按钮是动态创建的。
您也可以使用one()
委托处理程序(在 jQuery 1.7+ 中)并将已弃用的live()
函数替换为以下内容:
$(document).one('click', '#testBtn', function(){
alert('hey ya');
});
替换document
为最近的非动态父级。
您可以使用one
功能:
$('#testBtn').one('click', function(){
alert('hey ya');
})
演示:http: //jsfiddle.net/SEjYK/
使用one()
:
$('#testBtn').one('click', function(){
alert('hey ya');
})
$('#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');
});
你可以这样做,这可能是运行速度最快的..去 jsperf.com 检查
$('#testBtn').bind('click', function() {
$(this).unbind('click');
alert('Clicked and unbound!');
});
编辑:我认为这是运行最快的添加 3 个测试用例 - http://jsperf.com/one-event 运行 2-3 次以获得最佳结果.. 每次我运行它时,绑定速度最快,一个慢 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')
将删除单击事件处理程序,因此它不会再次触发。
最好的选择是使用 .one 而不是 live 作为按钮。这更有意义.. 如果您不想使用它,那么您可以在页面中使用 Hiddenfield,并在触发点击事件时设置标志值..
下次单击按钮时检查标志值,如果它已经执行过一次,则不要运行其中的代码..
检查这个例子 http://jsfiddle.net/sushanth009/Fakb5/
另请注意 .live 在当前的 jQuery 版本中已被弃用。最好使用 .on() 代替
您可以使用 unbind 删除所有点击事件:
$('#testBtn').unbind('click');
$('#testBtn').unbind('live');