我有一个命令,其作用像这样的数据表:禁用图像中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,"\\:"); }
有谁知道我怎样才能防止这种请求被发送两次? 我知道还有很多其他的解决方案,我的代码写得很差..但我只是想让它工作。
问候