我有一些奇怪的行爲與我的asp.net MVC3應用程序中的jQuery ajax功能。jquery live()追加點擊事件導致多次點擊
我有幾個數據框,每個數據框都包含一個鏈接來打開彈出框並更改每個框中的數據。爲此,我添加了一個jquery live()
click事件來通過jQuery ajax調用來處理數據。在ajax調用的「成功」方法中,我獲取返回數據並打開包含單選按鈕列表的UI對話框彈出窗口(局部視圖)。我選擇一個不同的單選按鈕並按'關閉' - 關閉按鈕觸發另一個點擊事件,通過ajax調用新數據來處理新數據,該數據刷新主頁面框中的數據。
這完美的第一次。如果您再點擊一次來更改它,彈出窗口會打開,允許您選擇一個新值,但是這次按下彈出窗口上的關閉會觸發兩個點擊事件,這些事件會在我的MVC控制器中引發一個空錯誤。
如果您重複此過程,它會觸發3個點擊事件,因此很顯然live()
正在某處添加這些事件。
我使用on()
和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();
});
有人知道這裏可能發生了什麼,我該如何解決?
不回答你的問題,但請停止使用'.live()'方法。它已被[棄用現在年齡](http://liveisdeprecated.com)。改用'.on()'(jQuery 1.7+)或'.delegate()'。 –
是的,我嘗試過(),但由於父級div加載了ajax,甚至無法獲取鏈接,這就是爲什麼我回到live()。 –
閱讀['.on()'](http://api.jquery.com/on/)的文檔。你不能用'.on'代替'.live',並期望它能立即工作 - 你需要稍微重構代碼。 –