可能重复:
How can I remove the event handler once the click event has fired?
我正在尝试使用live将click事件分配给按钮,并希望用户只能触发一次。反正有吗?
//I only want the alert show once and disable the click event...
$('#testBtn').live('click', function(){
alert('hey ya');
})
请注意:该按钮是动态创建的。
答案 0 :(得分:8)
您也可以将one()
与委派处理程序一起使用(在jQuery 1.7+中),并将已弃用的live()
函数替换为以下内容:
$(document).one('click', '#testBtn', function(){
alert('hey ya');
});
将document
替换为最近的非动态父级。
答案 1 :(得分:4)
您可以使用one
功能:
$('#testBtn').one('click', function(){
alert('hey ya');
})
答案 2 :(得分:0)
使用one()
:
$('#testBtn').one('click', function(){
alert('hey ya');
})
答案 3 :(得分:0)
$('#testBtn').one('click', function() {
alert('hey ya');
});
希望这有帮助!
编辑:如果你绝对想要使用'live':
$('#testBtn').live('click', function() {
$(this).die('click');
alert('hey ya');
});
如果你想使用'one',只需在生成动态对象并将其附加到文档后运行第一个代码片段。
如果你使用的是“实时”类型的方法,虽然我建议使用“on”,因为不赞成直播:
$(document).on('click', '#testBtn', function() {
$(this).die('click');
alert('hey ya');
});
答案 4 :(得分:0)
你可以这样做,可能运行速度最快..用jsperf.com检查
$('#testBtn').bind('click', function() {
$(this).unbind('click');
alert('Clicked and unbound!');
});
编辑:我认为这会运行最快的3个测试用例 - http://jsperf.com/one-event
运行2-3次以获得最佳结果..每次我运行它绑定最快,一个慢3%。
答案 5 :(得分: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')
将删除点击事件处理程序,因此不会再次触发。
答案 6 :(得分:0)
最好的选择是使用.one而不是实时按钮。这更有意义.. 如果您不想使用它,那么您可以在页面中使用Hiddenfield,并在触发click事件时设置标志值..
下次单击按钮时检查标志值,如果已执行一次,则不要在其中运行代码..
请查看此示例http://jsfiddle.net/sushanth009/Fakb5/
另请注意,在当前的jQuery版本中不推荐使用.live。最好使用.on()代替
答案 7 :(得分:-1)
您可以使用取消绑定删除所有点击事件:
$('#testBtn').unbind('click');
$('#testBtn').unbind('live');