【问题标题】:Disable image submit button in PrimeFaces p:datatable在 PrimeFaces p:datatable 中禁用图像提交按钮
【发布时间】: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


    【解决方案1】:

    好像我解决了我的问题:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-11
      • 2013-06-11
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 2011-03-12
      • 1970-01-01
      相关资源
      最近更新 更多