2011-11-04 61 views
1

如果我使用「element.onclick = function(){...};」將元素添加到元素中「語法,後來我用jQuery clone api克隆元素,使用'true'參數,然後克隆的元素不會獲得本地添加的事件處理程序。我如何解決它,如果我以上使用的本地語法是必須的(所以請不要給我一個像「使用$(element).click(function(e){...})的答案; 「等等)。jQuery clone api不克隆原生javascript事件

在代碼:

編輯:請上的jsfiddle檢查:http://jsfiddle.net/86f96/

+0

你可以爲此創建一個jsfiddle,所以我們可以看看完整的代碼和HTML?這樣做總是比較容易,看看沒有其他東西會影響JS。 –

+0

當然。謝謝你的建議! – Burnee

回答

1

你不能有2種元素在同一頁面上的ID btn

編輯:

我看着的jsfiddle,並可惜我不能想出不同的解決方案,不是再次安裝的單擊事件,追加clone

EDIT 2後,其他:

這和我一樣近,沒有改變原生JS onclick事件。所以,如果出於某種原因,你不能改變先前定義的功能,這將有助於:

var element = document.getElementById('element'); 
document.getElementById('element').onclick = function() { alert('clicked'); }; 
//... 
var clone = $(element).clone(true); 
var native_click_function = $(element)[0].onclick; 
$(element).remove(); 
clone.appendTo('body').click(function(){ 
    native_click_function(); 
}); 

的代碼是從JS小提琴拍攝。

+0

是的,我知道,這只是一個虛擬代碼。在追加克隆之前刪除原始元素。 – Burnee

+0

EDIT2之後我粘貼的代碼有幫助嗎? –

+0

這個建議給了我一個解決問題的想法,但我必須更抽象地工作。也許我會覆蓋克隆API,並走過所有可能的本地事件。所以,你讓我更接近解決方案。 – Burnee

0

append和appendTo不傳遞事件。有些人認爲它是一個bug,有些人認爲它是一個功能,但唯一的解決方法是使用live()或重新定義事件。

+0

我以相同的方式使用了克隆,但它不起作用,正如我在描述中寫的。 clone(true)僅適用於jQuery事件,它們存儲在jQuery數據中。 – Burnee

+0

對不起,我寫了答案正確閱讀jsfiddle代碼。 –