如何使按钮可以单击一次?

时间:2012-09-05 16:01:29

标签: jquery

  

可能重复:
  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');
})

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

8 个答案:

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

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

答案 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!');
});​

http://jsfiddle.net/usZSU/

编辑:我认为这会运行最快的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');