2012-05-04 46 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