我有一个复选框组(h:selectManyCheckbox
),当选中或取消选中框时,会触发一个AJAX事件。对于f:ajax
,这很简单,例如f:ajax execute="@form" event="click"
。
我想在每次点击后不再重新执行此操作。相反,我想要一个空闲的延迟,这样如果用户快速连续点击三个方框,那么只有一个往返而不是三个。
有没有办法让JSF AJAX监听器(f:ajax
)在这样的延迟后触发?
答案 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>