2009-11-13 39 views
0

我想知道如何重新綁定正常鏈接的以前的行爲! 例如:重新綁定上一個事件

function removeDefaultBehaviour(objects){ 
    objects.each(function(){ 
     $(this).data('onclick',$(this).attr('onclick')); 
     $(this).attr('onclick','return false;'); 
    }); 
}; 

function addDefaultBehaviour(objects){ 
    objects.each(function(){ 
     if($(this).data('onclick')!='') 
      $(this).attr('onclick',$(this).data('onclick')); 
    }); 
}; 

我試圖以前的行爲存儲在各鏈路的數據對象。但是這不起作用! 任何建議,如何恢復鏈接的以前和默認行爲! THX

馬庫斯

+0

你怎麼調用這些方法?你確定你傳遞給他們jquery對象嗎?或者你應該調用$(objects).each()而不是objects.each()? – Lobstrosity 2009-11-13 17:43:06

回答

0

不要試圖處理onclick和其他事件處理程序作爲字符串,因爲DOM setAttribute或jQuery attr會做。函數不能被適當地串行化爲一個字符串。相反,使用正常的DOM事件處理性能,如element.onclick獲取和設置真正的函數對象:

function falsefunction() { 
    return false; 
} 
function nofunction() { 
    return; 
} 

function removeDefaultBehaviour(objects){ 
    objects.each(function(){ 
     if (this.onclick) 
      $(this).data('onclick', this.onclick); 
     this.onclick= falsefunction; 
    }); 
} 

function restoreDefaultBehaviour(objects){ 
    objects.each(function(){ 
     var onclick= $(this).data('onclick'); 
     this.onclick= onclick? onclick : nofunction; 
    }); 
} 

然而,雜耍事件處理程序一樣,這是一個有點味道,通常意味着你會更好用bind

function preventDefault(event) { 
    event.preventDefault(); 
} 

function removeDefaultBehaviour(objects){ 
    objects.bind('click', preventDefault); // or objects.click(preventDefault); 
} 

function restoreDefaultBehaviour(objects){ 
    objects.unbind('click', preventDefault); 
} 
+0

Thx很多!你的第二個建議太棒了! ;) – 2009-11-13 19:04:02

0

試試這個:

function removeDefaultBehaviour(objects){ 
    objects.each(function(){ 
     $(this).data('onclick',$(this).attr('onclick').toString()); 
     $(this).attr('onclick','return false;'); 
    }); 
}; 

沒有的toString()函數,你不會得到onclick事件的代碼內容,你只會得到 「的onclick(事件)」 。

0

通過$(this).attr('onclick')返回的數據是最有可能的一個功能。

因此在設置你需要再次封裝成函數

$(this).attr('onclick',function(){return $(this).data('onclick')}); 

否則函數被執行,而不是設置。