2011-04-02 53 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 =''”事件完成后自动恢复。