我有一个Checkbox Group(h:selectManyCheckbox
),并在检查或未选中盒子时,有一个Ajax事件要开火。这很简单f:ajax
,例如f:ajax execute="@form" event="click"
。
我想增强它在每次点击后不重新执行。相反,我想要一个空闲延迟,这样如果用户快速连续单击三个框,则只有一个往返而不是三个。
有没有办法让 JSF AJAX 侦听器(f:ajax
)在这样的延迟后触发?
如果您还没有使用 JSF 2.2,您可以使用 JS setTimeout()
/clearTimeout()
来使 onclick 超时,并在再次单击时清除任何先前设置的。
例如
<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>