我有一个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 次 |
| 最近记录: |