我有一个带有CommandButton的DataTable,其行为如下:
<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 :(得分:0)
好像我解决了我的问题:
function disableSubmit(id) {
$("#" + escapeJSFid(id)).click( function() {
// alert ("DISABLED");
return false;
});
}
Onclick:将执行函数disableSubmit(id)。 onClick函数将被删除。 但是,我猜PrimeFaces数据表存储了关于bean(某处)中的按钮等的信息。 按钮将使用旧值和事件自动恢复(onclick)。 当我双击我的按钮时,我看到DISABLED警告消息。 但是当我点击按钮时,等待2-3秒然后再次点击按钮,不会出现任何消息。正常功能正在执行中。所以我想我的按钮会在“action =''”事件完成后自动恢复。