我正在尝试返回使用spark渲染的asp mvc2中的局部视图。 该视图包含一些JavaScript。 一切都被渲染,但脚本没有执行
这是代码
<table>
<tr>
<td>
!{Html.LabelFor(model => model.SourceId, new { @class = "label-inline", title = "Source d'ouvrage" })}
!{Html.DropDownList("SourceList", Model.SourceList, "Choisir la source", new { @class = "combo-box" })}
</td>
<td>
!{Html.LabelFor(model => model.AgentId, new { @class = "label-inline", title = "Représentant" })}
!{Html.DropDownList("AgentList", Model.AgentList, "Choisir le représentant", new { @class = "combo-box" })}
</td>
</tr>
<script type="text/javascript">
$("#SourceList").change(function() {
alert('youpi');
$.ajaxSetup({ cache: false });
var selectedItem = $(this).val();
alert(selectedItem);
if (selectedItem == "" || selectedItem == 0) {
//Do nothing or hide...?
} else {
var path = '~/sources/' + selectedItem + '/agents';
$.getJSON(path, function(data) {
agents = data;
var items = "";
$.each(data, function(i, agents) {
items += "<option value='" + agents.Id + "'>" + agents.Name + "</option>";
});
$("#AgentList").html(items);
});
}
});
</script>
我做错了什么? 感谢
答案 0 :(得分:0)
Jquery Ajax函数将从结果中删除javascript并在将HTML插入DOM之前运行它。
你最好的两个选择是
将JS包含在视图的非ajax部分(视图或同时呈现的部分)的函数中,并将此函数作为ajax调用的成功回调调用
或者将$("#SourceList").change(function() {
替换为$("#SourceList").live('change', function() {
,但即使这样做,您最好不要将其作为通过Ajax返回的部分包含在内。
答案 1 :(得分:0)
我会将脚本放在jQuery文档就绪事件处理程序中,以便在DOM完全加载后运行它。可能是在DOM创建#SourceList
之前脚本正在运行。
例如:
<script type="text/javascript">
$(function() {
$("#SourceList").change(function() {
....