延迟复选框组的 JSF AJAX 侦听器

2023-12-22

我有一个复选框组(h:selectManyCheckbox),并在选中或取消选中框时触发 AJAX 事件。这很简单f:ajax, e.g., f:ajax execute="@form" event="click".

我想增强此功能,以便在之后不再重新执行every点击。相反,我想要一个空闲延迟,这样如果用户快速连续单击三个框,则只有一次往返而不是三次。

有没有办法让 JSF AJAX 监听器(f:ajax)在这样的延迟后开火?


如果您还没有使用 JSF 2.2,您可以使用 JSsetTimeout()/clearTimeout()使 onclick 超时并在再次单击时清除以前设置的任何内容。

E.g.

<h:selectManyCheckbox ... styleClass="delayClick">
    <f:selectItems ... />
    <f:ajax ... />
</h:selectManyCheckbox>

基本上(也有 jQuery 的一点帮助)

$(".delayClick input").each(function(index, input) {
    var onclick = input.onclick;
    input.onclick = null;

    $(input).on("click", function(event) {
        delay(function() { onclick.call(input, event); }, 1000);
    });
});

var delay = (function() {
    var timer = 0;

    return function(callback, timeout) {
        clearTimeout(timer);
        timer = setTimeout(callback, timeout);
    };
})();

如果您已经使用 JSF 2.2,请设置delay的属性<f:ajax>.

<h:selectManyCheckbox ...>
    <f:selectItems ... />
    <f:ajax ... delay="1000" />
</h:selectManyCheckbox>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

延迟复选框组的 JSF AJAX 侦听器 的相关文章

随机推荐