2010-06-04 111 views
1

前附加的處理程序是什麼愨設置的onclick功能這樣的區別: obj.onclick=new Function('functionname')設置onclick事件刪除

obj.onclick=function(){ functionname();}; 

如何設置onclick事件刪除所有previrius附? (使用jQuery或簡單的JavaScript) 我嘗試這樣的:

$(obj).unbind('click'); (); { functionname(); });

但解除綁定似乎甚至刪除下一個附加事件。 感謝 編輯:

我使用jQuery設置的點擊事件:

function ON(){ 
$('#makecorr').unbind('click');//i unbind for some reason..  
$('#makecorr').click(function() { OFF(); }); 
} 
function OFF(){ 
$('#makecorr').unbind('click');//i want to remove prev attached fun 
//and replace it with new event 
$('#makecorr').click(function() { ON(); }); 
} 

對於我這個不工作,當我點擊的對象makecorr「它會在循環,如果我把警報,它無限上升 但是當我使用:'

function ON(){ 
$('#makecorr').get(0).onclick=new Function('OFF()'); 
} 
function OFF() 
{ 
$('#makecorr').get(0).onclick=new Function('ON()'); 
} 

它的工作原理。奇怪我在哪裏錯了?

回答

2

這對線:

$(obj).unbind('click'); 
$(obj).click(function() { functionname(); }); 

...如果在順序執行上述應導致剛剛你定義有被連接的處理程序。如果您看到其他行爲,則必須是腳本中的其他內容。

關於

是什麼愨以這種方式設定的onclick函數的區別:
obj.onclick=new Function('functionname')
obj.onclick=function(){ functionname();};

如果你動態地添加處理程序元素和你」由於其他原因已經使用jQuery,你根本不想使用onclick屬性;堅持jQuery API,以避免讓自己感到困惑。 :-)

即使你不使用jQuery,你幾乎從來沒有想用new Function(...)。只有非常特殊的情況下你需要這種情況。大多堅持function() { functionname(); }(或直接使用functionname直接)。

+0

@ user354881:建議使用該信息更新您的問題(格式化),這在評論中非常接近無法閱讀。當我回來時我會看看。 – 2010-06-04 14:09:30