2013-05-10 91 views
0

希望这是有道理的...jQuery追加不识别元素在jQUery加载部分视图

我有一个页面,加载一个对话框。对话框的外壳实际位于主页面的HTML中(display:none)。在对话框中,我通过以下调用加载了部分视图。

$('.partial').load(url, function (html) { $('.partial')[0].value = html; }); 

该局部视图有两个选择框。当第一个改变时,第二个应该通过.getJason调用填充。这个电话在下面。

$.getJSON(url, function (result) { 
    var dropList = $("#select"); 
    var options = ""; 
    $.each(result, function() { 
     options += '<option value="' + this.ID + '">' + this.Name+'</option>'; 
    }); 

    $("#select2").empty().append(options); // doesn't work located on the partial view 
    $("#test2").empty().append(options); // works located on main page 
}); 

的.getJason呼叫经由带有onChange一个函数调用=“populateSecondSelect()”,因为在网页最初加载后的局部视图被加载(在。对将不会在这种情况下工作)。

问题是我试图加载选项到第二个选择的部分。 jQuery .append不能识别该元素。我知道调用正在工作,因为当我尝试在主页面上的“Test2”中加载值时,它的工作原理。

如何让jQuery将元素识别为加载的部分视图上的.append?

回答

0

好的,我想出了一个解决方法。我的想法是,我需要填充第二个选择框,因为我需要将它与docuemnt.on调用绑定,我在实际的select语句中使用了mousedown。

$(document).on("mousedown", "#select2", function(){ 
    if(options != "") { // that options is "global" 
     $(this).empty().append(options); 
     options = ""; 
    }  
}); 

这完全填充它。太好了,耶!现在,问题是当第一个选择被改变时,第二个选择选项将显示。我想这将不得不做。 :(

1

你是对的,通常on方法不会工作,如果内容稍后加载。但是,on方法可以直接附加到document对象,该对象允许将事件附加到选择器,即使它们尚未添加到DOM中。

$(document).on("change", "#select", populateSecondSelect); 

尽管需要使用此方法将事件绑定到动态加载的元素,但只需选择元素并附加html即可按预期工作。我怀疑代码中的其他地方可能存在问题。尝试发布一个更完整的代码示例JSFiddle

+0

我改变了代码,使用$(document).on并得到它的工作,谢谢,但事实仍然是,填充第二个选择的append不起作用。修改函数来附加一个.on或类似的东西? – ZombieCode 2013-05-11 05:18:20