我在ASP.NET MVC中遇到了模态寡妇的奇怪问题.我创建了一个链接,负责显示模态窗口.模态窗口显示并包含一个按钮 – 保存按钮.我将click事件处理程序附加到此按钮以保存窗口的内容然后将
// this link shows up a modal window @Html.ActionLink("Add", "Add", "Index", null, new { id = "actionLinkAdd" }); and javaScript $(function () { debugger; $("#actionLinkAdd").on("click", function (event, action) { // attaching to click event debugger; event.preventDefault(); //disabling default handler var $dialog = $('<div></div>'); var $url = $(this).attr('href'); $dialog.empty(); var $kendoWindow = $dialog.kendoWindow({ //window creating height: "200px", title: "Dodaj", visible: false, width: "200px", actions: ["Close"], content: $url // loading of the window's content (partialView) }).data("kendoWindow"); $kendoWindow.center(); $kendoWindow.open(); function onButtonSaveClick(event) { debugger; event.preventDefault(); var $url = $('#target').attr("action"); $.ajax({ url: $url, type: "POST", data: $('#target').serialize(), success: function (response) { $("#btnSave").unbind("click"); $kendoWindow.close(); $kendoWindow.destroy(); }, error: function (args) { debugger; $("#btnSave").unbind("click"); $kendoWindow.content(args.responseText); } }); } $('#btnSave').live("click", onButtonSaveClick); // attaching to click event on save button in the modal window }); });
一切都工作得很好.问题是函数onButtonClick()被激活了几次.例如,如果我打开模态窗口两次,这个函数也会被调用两次.这对我来说很奇怪,因为我关闭模态窗口,销毁它甚至取消绑定附加到btnSave的所有点击事件(我也尝试使用开启和关闭功能,但窗口的行为是相同的).这种行为可能是什么原因?
或者甚至更好地移动绑定事件的线:} $('#btnSave').live("click", onButtonSaveClick); }); });
因此下降一行:
} }); $('#btnSave').live("click", onButtonSaveClick); });
问题是你每次创建一个新的对话框时都会调用live,但是没有使用’unbind’取消绑定它.但是你不需要,你只需要在页面准备就绪时调用的最外层函数中使用live一次绑定,然后它将获取任何id =’btnSave’的任何单击.现在你不应该真正创建多个具有相同id的元素的对话窗口,你应该把类设置为’btnSave’,但这是另一个故事..