我有一個命令,其作用像這樣的數據表:禁用圖像中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,"\\:"); }
有誰知道我怎樣才能防止這種請求被髮送兩次? 我知道還有很多其他的解決方案,我的代碼寫得很差..但我只是想讓它工作。
問候