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

wrs*_*der 3 ajax jsf

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

我希望增强此功能,以便在每次点击后不会重新执行.相反,我想要一个空闲的延迟,如果用户快速连续点击三个方框,那么只有一个往返而不是三个.

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

Bal*_*usC 6

如果你还没有使用JSF 2.2,你可以使用JS setTimeout()/ clearTimeout()来超时onclick并在再次点击时清除之前设置的那些.

例如

<h:selectManyCheckbox ... styleClass="delayClick">
    <f:selectItems ... />
    <f:ajax ... />
</h:selectManyCheckbox>
Run Code Online (Sandbox Code Playgroud)

基本上(也有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);
    };
})();
Run Code Online (Sandbox Code Playgroud)

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

<h:selectManyCheckbox ...>
    <f:selectItems ... />
    <f:ajax ... delay="1000" />
</h:selectManyCheckbox>
Run Code Online (Sandbox Code Playgroud)