2010-01-25 122 views
0

是否有可能JavaScript不適用於通過ajax請求創建的元素? 實際上,我有一個像父母和孩子一樣的元素樹與更多級別的部門。ajax在javascript創建元素

我有索引頁上的根元素上點擊,我可以retrive孩子低谷這個請求:

var get_children = function() { 
pid = $(this).attr("id"); 
//var parentid = pid 
    // store value in data variable 
    var data = { par: pid }; 
    $.getJSON("/holz/children/",data, 
     function(data){ 
     //remove the box if it already exists 
     $("#parid-" + pid).remove(); 
      // Add the messages div to the container 
      $("#container").append("<div class='box' id='parid-" + pid + "'></div>"); 
      //create the id set for the box 
      boxid = "#parid-"+pid 
      //insert the elements one after each other with the id set to the elements pk 
      $.each(data, function(i,item){ 
       $(boxid).append('<p><a '+'id="'+item.pk+'"'+' class="element" href="#">'+item.fields.title +' (id = '+ item.pk+')'+'</a>'+'</p>'); 
      }); 
     } 
    ); 
    return false; 
}; 

的問題是,由於請求doenst適用於我得到的元素我不能走得更深從第一個請求。 ajax請求調用一個django視圖,該視圖應該(並且它在第一個元素上)並返回一個json響應,我使用它來爲子項創建一個框。

我在做什麼錯?

THX

回答

1

我不確定我完全理解,但它聽起來像你想要一個onclick事件處理程序適用於具有某個css類.element的所有domeblements。我對嗎?

如果是這樣,那麼只是use jQuery's live() event binder語法。這將允許您將事件綁定到現在和將來與給定選擇器匹配的所有dom元素。

要使用一些自己的代碼爲例:

$('div.box').live('click', function() { 
    alert('you clicked me!'); 
}); 

$("#container").append("<div class='box' id='parid-" + 1 + "'></div>"); 

在我們動態地添加將有我們的點擊事件綁定到它,因爲我們使用了jQuery API插入它div上面的例子。

+0

約定的,動態添加的元素沒有連線,因爲連線代碼已經運行,所以您必須使用live才能確保添加的元素也已連線。 – 2010-01-25 19:40:04

+0

thx球員......這工作。 – aschmid00 2010-01-26 07:06:29

0

不,JavaScript的始終適用於在DOM每個有效的元素,無論它是從哪裏來的。

我真的不能從你的代碼中理解多少,但也許你的AJAX調用注入了文檔中已經存在的ID元素? 在嘗試解決這些元素時會造成麻煩。

+0

你沒有給新到的孩子元素,他們可以聽的任何onclick事件,對嗎? – 2010-01-25 16:22:59

+0

您需要重新應用您用來使鏈接可點擊的任何功能。目前,您從AJAX調用中獲得的僅僅是沒有任何附加操作的死鏈接(這是設計)。 – 2010-01-25 16:28:54