我的 asp.net MVC3 应用程序中的 jQuery ajax 功能发生了一些奇怪的行为。
我有几个数据框,每个数据框都包含一个链接,用于打开一个弹出窗口并更改每个框中的数据。为此,我添加了一个 jquery live()
click 事件来通过 jQuery ajax 调用处理数据。在 ajax 调用的“成功”方法中,我获取返回数据并打开一个 UI 对话框弹出窗口(部分视图),其中包含单选按钮列表。我选择了一个不同的单选按钮并按“关闭” - 关闭按钮触发另一个live()
单击事件,通过 ajax 调用处理新数据,该调用刷新主页上框中的数据。
这第一次完美运行。如果您然后单击以再次更改它,弹出窗口将打开,允许您选择一个新值,但是这次在弹出窗口上按下关闭会触发两个点击事件,这会在我的 MVC 控制器中引发空错误。
如果您重复此过程,它会触发 3 个点击事件,因此很明显live()
将这些事件附加到某处。
我试过使用on()
and click()
,但是页面本身是由通过 ajax 加载的面板组成的,所以我曾经live()
自动绑定事件。
这是我正在使用的代码:
HTML
<p><!--Data to update goes here--></p>
<a href="#" class="adjust">Update Data</a>
带有部分视图的首次单击事件调用弹出窗口
$('a.adjust').live('click', function (e) {
var jsonData = getJsonString(n[1]);
var url = '@Url.Action("ChangeOptions", "Search")';
var dialog = $('<div id="ModalDialog" style="display:none"></div>').appendTo('body');
// load the data via ajax
$.ajax({
url: url,
type: 'POST',
cache: false,
contentType: "application/json; charset=utf-8",
data: jsonData,
success: function (response) {
dialog.html(response);
dialog.dialog({
bgiframe: true,
modal: true
}
});
}
});
e.preventDefault();
});
第二次单击事件将获取新信息以返回更新的部分视图
$('a#close').live('click', function (event) {
var jsonData = getJsonString(n[1]);
var url = '@Url.Action("GetChangeInfo", "Search")';
$.ajax({
url: url,
type: 'POST',
contentType: "application/json; charset=utf-8",
data: jsonData,
success: function (response) {
$('#box-' + @column).html(response); //this refreshes the box on the main page
},
error: function () {
}
});
$('#ModalDialog').dialog('close');
event.preventDefault();
});
任何人都知道这里可能会发生什么,以及我该如何解决?