jQuery在jquery加载的部分视图中追加不识别元素

时间:2013-05-10 23:36:32

标签: jquery asp.net-mvc-4 append partial-views getjson

希望这是有道理的......

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

$('.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()”的函数调用的,因为部分视图在页面初始加载后加载(.on在这种情况下不起作用)。

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

如何让jQuery在该加载的局部视图上识别.append的元素?

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

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

这完全填补了它。好的,耶!现在,问题是第二个选择选项将在第一个选择被更改时显示。我想这将是必须的。 :(