3

h:selectManyCheckboxボックスがオンまたはオフになったときに発生する AJAX イベントを含むチェックボックス グループ ( ) があります。これはf:ajax、たとえば で簡単f:ajax execute="@form" event="click"です。

クリックするたびに再実行しないようにこれを強化したいと思います。代わりに、ユーザーが 3 つのボックスを立て続けにクリックした場合に、往復が 3 回ではなく 1 回だけになるように、アイドル遅延が必要です。

f:ajaxこのような遅延の後にJSF AJAX リスナー () を起動させる方法はありますか?

4

1 に答える 1

6

まだ 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>
于 2012-10-01T18:43:33.623 に答える