2014-09-04 47 views
-1

我有一個AJAX調用,當它這樣做,我有這樣的代碼:
不能使用用append方法創建的元素

$(".results").append('<div class="horizontal result_element"><div class="result_photo"></div><div id="'+user_id+'" class="result_data">'+user_name+'</div></div>'); 

後,我想要的東西,當我在類result_element點擊發生:

$(".result_element").click(function(){ 
var url = "profile.php?user_id="+$(this).children("[class='result_data']").attr("id"); 
$(location).attr('href',url); 
}); 

但它不起作用,我的想法是,jQuery創建html元素,但不會將它們追加到DOM.Any我怎樣才能使這個方法的工作?

+0

'$(「。results」)'可能不匹配任何東西。如果是這樣,'.append()'什麼也不做,並導致你所看到的。 – Pluto 2014-09-04 18:20:05

+0

Woudl將$(。results).append和元素$(「div class ...)的創建分開,然後掛接到$(」。result_element「,createdElements)上的.click工作? – 2014-09-04 18:21:06

+0

@Pluto append完美工作它會創建元素並顯示它們,但是以後我不能在jQuery中使用它們@馬文可以更好地解釋它,因爲我得到了共享 – 2014-09-04 18:22:46

回答

1

我假定你的意思是'稍後'用戶視線中的時間而不是腳本中的時間。

問題是,如果您在解釋jQuery shell在事件y上執行x之後創建它,jQuery不知道該元素。因此,如果您將click -event設置爲$(document).ready(function(){*here*})並且之後創建了一個元素(在文檔就緒被觸發後),那麼jQuery並不知道這些新元素。

所以要解決你的問題,請嘗試創建的元素後添加事件(創建不等於追加!):

// created the element 
var newElement = $('<div class="horizontal result_element"><div class="result_photo"></div><div id="'+ user_id +'" class="result_data">'+ user_name +'</div></div>'); 

// now set the event 
newElement.click(function() { 
    var url = "profile.php?user_id="+ $(this).children("[class='result_data']").attr("id"); 
    $(location).attr('href',url); 
}) 

// now append it 
newElement.appendTo($(".results")) 
// or: $(".results").append(newElement) 

而且你可以重新排序最後兩個步驟,所以你首先附加它然後設置事件,那不是重點。重點是,您先創建元素,然後設置事件。

+0

也可以用我的代碼,如果我在父元素.results在append之前存在。對於專業人員; D – 2014-09-04 18:37:07

0

我相信,點擊不能在result_element類中動態添加。嘗試使用以下代碼段。

$(document).on("click",".result_element", function(){ 
    var url = "profile.php?user_id="+$(this).children("[class='result_data']").attr("id"); 
    $(location).attr('href',url); 
});