我有一个h:selectManyCheckbox
带有AJAX事件的复选框组(),当选中或取消选中框时会触发.这很简单f:ajax
,例如,f:ajax execute="@form" event="click"
.
我希望增强此功能,以便在每次点击后都不会重新执行.相反,我想要一个空闲的延迟,如果用户快速连续点击三个方框,那么只有一个往返而不是三个.
在这样f:ajax
的延迟之后有没有办法让JSF AJAX监听器()触发?
如果你还没有使用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)
归档时间: |
|
查看次数: |
2160 次 |
最近记录: |