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

时间:2012-10-01 16:21:26

标签: ajax jsf

我有一个复选框组(h:selectManyCheckbox),当选中或取消选中框时,会触发一个AJAX事件。对于f:ajax,这很简单,例如f:ajax execute="@form" event="click"

我想在每次点击后不再重新执行此操作。相反,我想要一个空闲的延迟,这样如果用户快速连续点击三个方框,那么只有一个往返而不是三个。

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

1 个答案:

答案 0 :(得分:6)

如果您尚未使用JSF 2.2,则可以使用JS setTimeout() / 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的{​​{1}}属性。

<f:ajax>