2011-04-02 35 views
0

我有一個命令,其作用像這樣的數據表:禁用圖像中PrimeFaces p提交按鈕:數據表

<h:commandButton action="#{communicator.requestFavoriteDetails}" 
onclick="disableSubmit(this.id);" 
update="@navi:tableFavorites"> 
<f:setPropertyActionListener value="#{book}" 
target="#{favorites.selectedFavorite}" /> 
<f:ajax /> 
</h:commandButton> 

(我只是去掉了一些標籤...)

這個按鈕能正常工作。但在某些(移動)設備上,點擊發送兩次請求。我不知道爲什麼..我嘗試了一切,但沒有任何工作,以防止這種情況。 (例如)

此代碼被渲染爲: 標記,我知道這不能被禁用。

我想添加一個計時器。 當用戶點擊這個按鈕時,「onclick」事件應該被替換爲一個空函數,並且在2 ..秒後它應該被恢復。 這樣我可以阻止請求被髮送兩次。

功能disableSubmit(ID)的作用是這樣的:

function disableSubmit(id) { 
    var new_func = "function() { return false }"; 
    if (typeof(document.getElementById(id)) == "object" && typeof(document.getElementById(id).onclick) == "function") { 
     if ($("#" + escapeJSFid(id)).attr('onclick') != new_func) { 
     var old_func = $("#" + escapeJSFid(id)).attr("onclick"); 
     $("#" + escapeJSFid(id)).attr('onclick','"+new_func+"').delay(2000).attr('onclick','"+old_func+"'); 
     } 
    } 
} 

但這代碼不起作用。 FF不返回任何錯誤.. 哦..和escapeJSFid僅僅是一個簡單的函數:

function(id){ id.replace(/:/g,"\\:"); } 

有誰知道我怎樣才能防止這種請求被髮送兩次? 我知道還有很多其他的解決方案,我的代碼寫得很差..但我只是想讓它工作。

問候

回答

0

好像我解決我的問題:

function disableSubmit(id) { 
    $("#" + escapeJSFid(id)).click(function() { 
      // alert ("DISABLED"); 
     return false; 
    }); 
} 

的onclick:功能disableSubmit(ID)將被執行。 onClick函數將被刪除。 但是,我猜PrimeFaces數據表存儲在bean(某處)的按鈕等信息。 按鈕會自動恢復舊值和事件(onclick)。 當我雙擊我的按鈕時,我看到DISABLED警報消息。 但是,當我點擊按鈕,等待2-3秒,然後再次點擊按鈕,沒有消息出現。正常功能正在執行。所以我猜我的按鈕會在「action =''」事件完成後自動恢復。