在PrimeFaces p:datatable中禁用图像提交按钮

时间:2011-04-02 13:53:33

标签: image datatable submit primefaces

我有一个带有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,"\\:"); }

有人知道如何防止此请求被发送两次吗? 我知道还有很多其他的解决方案,我的代码编写得很好......但我只是想让它起作用。

祝你好运

1 个答案:

答案 0 :(得分:0)

好像我解决了我的问题:

function disableSubmit(id) {
    $("#" + escapeJSFid(id)).click( function() {
            // alert ("DISABLED");
        return false;
    });
}

Onclick:将执行函数disableSubmit(id)。 onClick函数将被删除。 但是,我猜PrimeFaces数据表存储了关于bean(某处)中的按钮等的信息。 按钮将使用旧值和事件自动恢复(onclick)。 当我双击我的按钮时,我看到DISABLED警告消息。 但是当我点击按钮时,等待2-3秒然后再次点击按钮,不会出现任何消​​息。正常功能正在执行中。所以我想我的按钮会在“action =''”事件完成后自动恢复。