2014-02-12 55 views
-1

所以,當我的頁面上有一些JavaScript函數在某些對象更改時執行,這很好。爲什麼我的Javascript無法在通過AJAX添加的對象上工作

在我的頁面上,我可以通過AJAX /文章等添加更多這些對象,這也很好。

但是,我寫的JavaScript不適用於這些新添加的對象,除非我將JavaScript粘貼到$(document).ajaxStop中。

我已經通過移動代碼解決了這個問題,但有人可以向我解釋爲什麼這是,我不知道,而且對整個過程來說還是比較新的,但是我的谷歌搜索並沒有真正地給我帶來一個解釋(可以因爲我沒有使用正確的術語),我想知道我是否應該以最好的方式做到這一點。

我有具體的例子是:

$(".subTable").change(function(event){ 
    $myObj = $(event.target) 
    var objID = $myObj.attr('name') 
    var objClass =$myObj.attr('class') 
    var objVal = $myObj.val(); 

    $newObj = $myObj.closest('td').next('td').find('input[type = checkbox]') 
    var checkedval = $newObj.is(":checked"); 

    if((objVal!= "") && (!checkedval)){ 
     $newObj.click(); 
    } 
    if(objClass=="subField"){ 
     updateHiddenField(objID)  
    } 

    }); 

這將正常工作,直到我增加了新的對象,然後一旦我把他們裏面,他們只會工作:

$(document).ajaxStop(function() { 

}); 
+0

可以顯示代碼? –

+0

JavaScript代碼,你說哪一個呢?要知道,比如,處理程序綁定到DOM已經存在的元素,你還可以委託事件最接近的靜態容器 –

+0

對不起,我不知道代碼在這個例子中會有很大的幫助,因爲我認爲這個問題是非常通用的。@fatman雖然能夠猜到我的困境(我沒有意識到JavaScript中的「on」,所以現在會重構我的代碼來使用它)乾杯! – MorkPork

回答

2

既然你沒有張貼這真的很難說任何代碼,但我可以猜測,它關係到使用click VS on

  1. $('selector').click() - 這將只對那些在DOM元素工作當你將事件綁定到它們時,即它不會在動態添加的元素上工作,除非在添加事件後將它們專門綁定到它們上(可能這就是將代碼移動到ajaxStop時會起作用的原因)

  2. $('ul').on('click','li', function(){}) - 這將w在動態添加的元素上運行。請注意,綁定事件時,綁定事件的元素必須處於綁定狀態(即,在綁定事件時,'ul'必須位於dom中,但'li'可以是動態的。]

+0

感謝您的猜測,在這個具體的例子中是'改變',但我猜這與'點擊'是一樣的,所以同樣的事情是必需的。感謝您的解釋我會去更新我的代碼! :) – MorkPork

+0

你是對的,所有的幫手方法都是一樣的。 – Tomer

1

當過添加一個新的元素來通過js頁面,這些新添加的元素將不會有事先附加的事件。因此,只要將元素添加到頁面,就應該附加事件。

另外使用jQuery你可以使用.on來附加事件。這將爲新添加的元素附加事件。

相關問題