2013-10-30 48 views
0

我正在爲我的客戶寫一個腳本,它已經有一些加密的JavaScript。某處在加密的JavaScript.remove()事件觸發與一個特定的按鈕。我發現檢測.remove()事件的腳本jQuery - Trigger event when an element is removed from the DOM。從那以後,我試圖阻止本該事件:如何阻止.remove()事件

$('#fileElem').on('destroyed', function(){ 
    $('#fileElem').die('remove');        
    $('input[name="done_upload"]').trigger('click'); 
}); 

但我得到了Uncaught TypeError: Object [object Object] has no method 'die'.remove()行動可能是destroyed事件觸發,我不知道。正如我用自動觸發按鈕$('input[name="done_upload"]').trigger('click');不工作,因爲我在觸發事件之前得到錯誤。

任何人都可以幫我停止刪除DOM元素嗎?

+0

我在我看來,一旦被摧毀的事件被觸發,元素已經消失了,所以攔截沒用。 –

+0

你可以使用這個URL解碼JavaScript:jsbeautifier.org – kwelsan

+0

@Baszz有沒有其他的方法? –

回答

2

我認爲destroyed事件被觸發時,元素已被破壞所以你得到一個空的jQuery查詢結果。

4

.die()下的removed section of jQuery提出異議,因此除非如果你正在使用jQuery(如< 1.8)的舊版本,它不存在了。這就是導致拋出錯誤的原因。

This fiddle(裝載1.9)警報false,同時測試.die(),這意味着它不存在。如果你使用1.8.3或更早的版本,它會提醒真實,這意味着它仍然存在。

如果您想阻止刪除該元素,我建議您「劫持」(替換)按鈕的點擊處理程序。

+1

可能值得一提的是,他可以在事件處理程序中將元素稱爲「$(this)」,因爲它可能不再可以通過DOM解析訪問(不太可能,但我知道,但值得他知道)。 – Archer

+0

@Archer,但是一個jQuery對象,無論它是否已經獲取DOM上的任何東西,仍然會有它的原型函數。做'$('#foo')。remove()。die()。off()'不存在'#foo'存在不會拋出錯誤。 – Joseph

+1

是的,但它可能不會返回任何我的觀點,而'this'仍然是對象的引用。就像我說的那樣,這不太可能,但是在向OP解釋使用'this'確實沒有什麼壞處。 – Archer