我有一個帶按鍵事件處理程序jsfiddle的文本字段。當我在此字段中輸入內容並按下「Enter」2次時,將發送2個請求。我想關閉所有事件,同時ajax請求正在進行中。一種選擇是在ajax調用之前調用.off()
函數,然後再次綁定事件處理函數。任何其他選項?在Ajax進程中解除綁定事件處理程序
0
A
回答
1
我用2個布爾標誌,如:
var is_requesting = false, should_request = false;
function onkeydown() {
if (is_requesting) {
should_request = true;
return;
}
is_requesting = true;
$.ajax({}, function() {
is_requesting = false;
if (should_request) {
onkeydown();
}
});
}
2
使用回調處理程序從您的AJAX調用和使用國旗的布爾值。通過在「始終」回調中將ajaxLoading布爾值設置爲false,您可以確保其他未來請求可以獨立於當前ajax調用是否引發錯誤。
var ajaxLoading = false;
if(!ajaxloading){
ajaxloading=true;
$.ajax({
url: 'your url',
type: 'GET',
dataType: 'JSON'
})
.done(function(data) {
console.log("success");
})
.fail(function() {
console.log("error");
})
.always(function() {
console.log("complete");
ajaxloading=false;
});
}
1
有沒有很好的理由不使用jQuery .off()函數?
如果是這樣,那麼您可以在創建ajax請求之前簡單地禁用該控件,並在請求完成後重新啓用該控件。這也會阻止用戶認爲他/她可以通過在請求期間更改文本值來更改結果。
//Disable the input
$('#myresult').prop('disabled', true);
$('#myresult').append('<br>'+$(this).val());
$.ajax({
type: "POST",
beforeSend: function() {},
complete: function() {
//Re-Enable the input
$('#myresult').prop('disabled', false);
},
url: "/echo/json/",
data: { delay : 3 },
success: function(){},
error: function() {},
dataType: 'json'
});
+0
不喜歡經常綁定/解除綁定。這很討厭我。禁用輸入字段是個好主意,謝謝。我會將它與布爾標誌結合起來 – Suic
相關問題
- 1. UIAutomation - 事件處理程序中的解除綁定事件
- 2. 從處理程序與綁定框架中解除事件
- 3. 無法解除綁定jQuery自定義事件處理程序
- 4. 解除綁定lambda事件處理程序
- 5. jquery解除綁定事件處理程序
- 6. Backbone.js的滾動事件與處理程序不解除綁定
- 7. jQuery:解除綁定事件處理程序
- 8. Rails UJS - 解除綁定事件處理程序
- 9. 在ajax加載後綁定多個事件處理程序
- 10. jQuery綁定事件處理程序
- 11. 綁定處理程序,形成「AJAX:成功」事件
- 12. 將Javascript事件處理程序綁定到Ajax HTML響應?
- 13. 在事件處理程序中刪除jquery事件處理程序
- 14. 試圖解除綁定事件處理程序是在$ .proxy,是一個原型
- 15. 在點擊內部解除綁定jQuery懸停事件處理程序
- 16. 事件處理程序綁定和使用ajax加載的頁面解除綁定
- 17. 如何使所有事件處理程序解除綁定並在做某事後重新綁定它們?
- 18. 如果綁定事件處理程序已綁定
- 19. 解決在JavaScript事件處理程序
- 20. 如果立即反彈,事件處理程序不會解除綁定
- 21. 在wx.TaskBarIcon派生類中綁定事件處理程序
- 22. 在Tkinter中獲取綁定事件處理程序
- 23. 如何在greasemonkey中取消綁定jquery事件處理程序?
- 24. 綁定事件處理程序到任何可能的事件
- 25. 敲除共享綁定處理程序
- 26. 只有在事件處理程序尚不存在的情況下,如何綁定事件處理程序?
- 27. 解除綁定所有事件處理程序,做一些事情,然後再綁定jquery
- 28. 解除綁定特定處理程序的JQuery
- 29. 如何爲自定義控件綁定事件處理程序
- 30. 在事件處理程序
我想你可以設置'異步:FALSE' – tymeJV
使用標誌(變量或數據屬性),但爲什麼不關閉()這就是它的存在了。 – adeneo
'async:false'是一個可怕的想法。它完全鎖定了JavaScript事件循環。如果您的用戶在同一時間做了其他事情,則附加的JavaScript也將無響應。而且我認爲你實際上會得到每個keydown的請求,他們只是序列化(延遲)。 – Halcyon