我目前在不同的頁面上有幾個動作按鈕,每個按鈕在點擊時執行一些AJAX調用。在另一個詞,我有這樣的代碼遍佈地方: -如何優雅地禁用/啓用所有jQuery UI按鈕?
$("#searchButton")
.button()
.click(function() {
...
$.get(url, { data: ...}, function(data) { ... });
...
});
做一些測試後,它似乎像一些AJAX調用至少需要超過幾秒鐘時間來處理被調用回調函數之前。
我的計劃是在AJAX調用完成時禁用該按鈕,並在AJAX調用完成時將其啓用。這是爲了防止用戶在處理請求時多次點擊該按鈕。我找到的一個解決方案是利用unbind()
和bind()
函數。修改我的代碼後,現在看起來像這樣: -
var searchButtonClickHandler = function() {
...
$.get(url, { data: ...}, function(data) { ... });
...
};
$("#searchButton")
.button()
.ajaxStart(function() {
$(this).button("disable").unbind("click");
})
.ajaxStop(function() {
$(this).button("enable").bind("click", searchButtonClickHandler);
})
.click(searchButtonClickHandler);
此代碼正常工作。基本上,它在AJAX調用完成時刪除點擊處理程序,並在AJAX調用完成時添加點擊處理程序。
我的問題是......是否可以概括按鈕禁用/啓用,以便我不必在所有UI按鈕上實現ajaxStart()
和ajaxStop
?
理想情況下,我想用我以前的代碼片段上的按鈕只有單擊事件處理程序,然後啓用/使用.ui-button
選擇,像這樣禁用所有按鈕...
$(".ui-button")
.ajaxStart(function() {
$(this).button("disable").unbind("click");
})
.ajaxStop(function() {
// not sure how to bind the handler here
$(this).button("enable").bind("click", ??);
});
...但是,這不起作用,我在這裏綁定點擊處理程序遇到了麻煩。
我越去想它,它似乎像我需要創建一個按鈕生成器功能,要做到這一點,例如: -
var createButton = function(selectorName, clickHandler) {
$(selectorName)
.button()
.ajaxStart(function() {
$(this).button("disable").unbind("click");
})
.ajaxStop(function() {
$(this).button("enable").bind("click", clickHandler);
})
.click(clickHandler);
};
// create button like this
createButton("#searchButton", function() {
...
$.get(url, { data: ...}, function(data) { ... });
...
});
......但這種做法只會禁用/啓用選中按鈕,我想將其應用於所有UI按鈕。
有沒有人有更好的方法來禁用/啓用頁面中的所有按鈕?
謝謝。
你可以使用'$('input [type = button]')。attr('disabled','disable');'禁用所有按鈕 – Rafay 2011-03-01 20:15:47
@ 3nigma:yu沒有回答? – 2011-03-01 20:18:18
我不確定它是否是OP需要或不需要的 – Rafay 2011-03-01 20:23:50