編輯:我錯誤地認爲這是由blockUI()引起的。我使用Firebug的console.log來記錄消息,但對於這裏的示例,我更改爲提醒,以便您不需要Firebug進行復制。一旦我再次測試,我可以刪除blockUI,並且onclick沒有開火。這個問題似乎是在DOM發生變化或反饋的時候,因爲它會阻止onclick發射。在onchange請求期間DOM操作(blockUI或alert())問題 - 防止其他事件觸發
我與
jQuery blockUI插件
有問題,併發射了兩個事件(我認爲,除非我失去它)無關。
基本上我有綁定到他們的onchange事件的文本框。該事件負責阻止用戶界面,執行ajax調用,併成功解除用戶界面。 ajax將文本保存在內存中。另一個控件是一個帶有onclick事件的按鈕,它也阻止UI,觸發ajax請求,將內存中的內容保存到數據庫,併成功解除UI的阻塞。
這兩個工作單獨罰款。當我點擊按鈕觸發onchange時,就會出現問題。然後只有onchange被觸發,onclick被忽略。
我可以更改複選框中的文本,單擊鏈接,如果存在jQuery.blockUI()存在(或警報),則會單獨激活onchange並從不調用保存。如果我刪除blockUI(或警報),則調用這兩個函數。
下面是一個可以看到問題的完整示例。請注意,當我試圖模擬ajax延遲時,setTimeout存在,但問題在沒有它的情況下發生。
要在文本框中複製類型並點擊保存。兩個事件都應該是觸發的,但只有onchange纔會被觸發。
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script src="http://github.com/malsup/blockui/raw/master/jquery.blockUI.js?v2.31"></script>
<script>
function doSomething(){
//$.blockUI();
alert("doing something");
//setTimeout(function(){
//$.unblockUI();
//},500);
}
function save(){
//$.blockUI();
console.log("saving");
//setTimeout(function(){
//$.unblockUI();
//}, 1000);
}
</script>
</head>
<body>
<input id="textbox" type="text" onchange="doSomething();">
<a id="link" href="#"onclick="save()">save</a>
</body>
</html>
看來問題不在於blockUI調用本身,而是在doSomething()中使用DOM進行播放。我原來的本地示例使用Firebug的console.log()而不是警報。 我已經修改了我的示例以完全脫掉jQuery.blockUI並僅使用警報......問題仍在發生。 – jfrobishow 2010-05-06 18:43:46