2012-05-04 21 views
2

我有类似:如何防止我的按钮的onclick 5秒

<button id="button" onclick="alert('Hi')">a button</button> 


我想取消按钮的onclick行动,比方说为页面加载后5秒。
注意:我不想让按钮被禁用,只是想要它的onclick动作不工作直到5秒。

+0

告诉我们为什么会帮助我们找出最适合您的解决方案。 –

回答

4

您可以简单地删除onclick属性,然后在5秒钟后放回。

var onClickFunc = $('#button').prop('onclick'); 
$('#button').removeProp('onclick'); 
setTimeout(function(){ 
    $('#button').click(onClickFunc); 
}, 5000); 

DEMO:http://jsfiddle.net/KX5g7/1/

+1

我不知道我们在1.6之前没有'.prop()'的生活。 – iambriansreed

+0

@iambriansreed:With'.attr' :-P –

4

使用jQuery在5秒超时后绑定事件。

setTimeout(function(){ 
    $('#button').click(function(){ 
     alert('Hi'); 
    }); 
}, 5000); 
+1

我不能,** onclick =“alert('Hi')”**来自服务器.. – skafandri

+0

@kil我想的很多。见火箭的答案。 – iambriansreed

+0

我对asnwer做了改进,5秒后解除绑定。 –

1
$(function(){ 
    $('#button').attr('savedclick', $('#button').attr('onclick')).removeAttr('onclick'); 
    setTimeout(enableButton, 5000);  
}); 

function enableButton(){ 
    $('#button').attr('onclick', $('#button').attr('savedclick')).removeAttr('savedclick'); 
} 

DEMO

+3

不要将字符串传递给'setTimeout',它使用'eval'。传递函数。 –

+0

@Rocket如果您对传递给它的字符串进行了硬编码,那么使用'eval'(显式或隐式)没有任何危险。这只是稍微低效。 – Blazemonger

+0

@Blazemonger:效率低下,做法不好。没有理由使用它。这就像使用螺丝刀作为锥子。你可以,但不应该。 :-P –

1
$(function(){ 
     $('#button').unbind('click'); 
     setTimeout(function(){ 
      $('#button').bind('click'); 
     }, 5000); 
    });​ 

编辑:

这似乎为n OT取消绑定事件作为火箭告诉,所以,我认为一个好的解决办法是删除触发事件的属性:

$(function(){ 
    $('#button').attr('onclick', ''); 
    setTimeout(function(){ 
     $('#button').attr('onclick', 'alert("Hi")'); 
    }, 5000); 
});​ 
+0

其他方式,他希望页面加载时解除绑定,并在5秒钟后重新绑定。 –

+1

完成,现在已停用5秒,然后开始绑定事件onClick。 –

+0

'$('#button')。unbind('click');'似乎没有取消绑定onclick事件。 –

0

要做到这一点,不要把onclick在线。

在你$(document).ready(...)功能,使用setTimeout等待5秒一个回调函数来设置的onclick($('#button').click(function(btn) { alert('Hi'); });

+0

我不能,按钮来自这样的服务器.. – skafandri

+0

哦,我没有得到这个问题。在这种情况下[这个答案](http://stackoverflow.com/a/10452652/866022)是要走的路 – yoozer8