這似乎應該是非常簡單但我不感覺它。在JSF中禁用commandButton
我有一個JSF CommandButton執行長時間運行serverside任務(10-15秒)。我已經看到單擊後按鈕上下文發生變化的表單(按鈕上的標籤更改,並且按鈕被禁用,直到處理完成)。
我正在使用ICEFaces並將禁用屬性設置爲底層頁面代碼上的布爾值。
綁定到該按鈕的動作偵聽器會更改該布爾值來禁用它,但是,在JSP上沒有更改。
有人嗎?
這似乎應該是非常簡單但我不感覺它。在JSF中禁用commandButton
我有一個JSF CommandButton執行長時間運行serverside任務(10-15秒)。我已經看到單擊後按鈕上下文發生變化的表單(按鈕上的標籤更改,並且按鈕被禁用,直到處理完成)。
我正在使用ICEFaces並將禁用屬性設置爲底層頁面代碼上的布爾值。
綁定到該按鈕的動作偵聽器會更改該布爾值來禁用它,但是,在JSP上沒有更改。
有人嗎?
你可以做的是利用改變按鈕的狀態的Javascript:
如果前面的代碼做:
<h:commandButton ... onclick="this.disabled=true"/>
有關評論編輯不提交表單,那麼你必須在點擊後一小段時間禁用按鈕,而不是在「點擊」本身期間。你可以做,用下面的代碼:
<h:commandButton ... onclick="setTimeout('this.disabled=true', 100);"/>
我不知道如果事實直接使用這關鍵字在setTimeout的方法將正常工作。如果沒有,你可以用另一種方式來做到這一點:
<h:commandButton ... onclick="disableButton(this.id);"/>
用下面的JavaScript函數:
function disableButton(buttonId) {
setTimeout("subDisableButton(" + buttonId + ")", 100);
}
function subDisableButton(buttonId) {
var obj = document.getElementById(buttonId);
if (obj) {
obj.disabled = true;
}
}
(我敢肯定,這個代碼可以提高,從而)
你應該使用ice:commandButton而不是h:commandButton,因爲它具有partialSubmit屬性,該屬性將執行AJAX調用的操作。這應該會刷新按鈕的狀態,所以如果服務器上的屬性設置爲false,則應該禁用按鈕。
+1利用OP正在使用的框架以優雅的方式解決問題。 – SplinterReality 2011-10-12 08:06:01
做一個javascript submit();先禁用按鈕
從romaintaz
的解決方案對於Firefox的具體的解決方案類似,下面的作品(它不工作在IE):
<h:commandButton ... onclick="disableButton(this.id);" />
使用JavaScript函數:
function disableButton(buttonId) {
var obj = document.getElementById(buttonId);
if (obj) {
setTimeout(function(thisObj) { thisObj.disabled=true; }, 50, obj);
}
}
在icefaces更新了DOM之後執行此操作。您可以使用:
這裏用jQuery
ice.onAfterUpdate(function(){
updateButtons();
});
function updateButtons(){
if(!isButtonEnabled()){
jQuery(".myButton").attr('disabled', true);
jQuery(".myButton").removeClass("iceCmdBtn").addClass("iceCmdBtn-dis");
}else{
jQuery(".myButton").removeAttr('disabled');
jQuery(".myButton").removeClass("iceCmdBtn-dis").addClass("iceCmdBtn");
}
}
可悲的是,與ICEfaces的,這種方法是行不通的。它實際上禁止它提交。我試圖在onMouseUp上做,但在第一次點擊後禁用它... – 2009-08-07 14:28:00
那麼我的新迴應呢? – romaintaz 2009-08-08 16:56:24
禁用後可以啓用該按鈕嗎? – 2016-04-01 15:08:24