【发布时间】:2011-04-02 13:53:33
【问题描述】:
我有一个带有 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,"\\:"); }
有人知道我可以如何防止这个请求被发送两次吗? 我知道还有很多其他的解决方案,而且我的代码写得不好……但我只是想让它工作。
最好的问候
【问题讨论】:
标签: image datatable submit primefaces