2

次のようなチェックボックスの長いリストがあります。

 <input class='masterCheckbox' type='checkbox' onclick='clickAll()' />

 <input class='modifyDb' type='checkbox' onclick='ajaxCall(someId)' />
 <input class='modifyDb' type='checkbox' onclick='ajaxCall(someId)' checked />
 <input class='modifyDb' type='checkbox' onclick='ajaxCall(someId)' checked />
 ... lets say there's exactly 100 ...
 <input class='modifyDb' type='checkbox' onclick='ajaxCall(someId)' />
 <input class='modifyDb' type='checkbox' onclick='ajaxCall(someId)' />
 <input class='modifyDb' type='checkbox' onclick='ajaxCall(someId)' checked />

このajaxCall()関数は、PHP ページに対して (jQuery を使用して) ajax 呼び出しを行い、DB に何らかの変更を加えます。

チェックボックスがチェックされている場合、チェックされていないmasterCheckboxすべてのチェックボックスを通過し、それらすべてをクリックして、それぞれが個別の ajax 呼び出しを行うようにします。

jQueryを使用して、すべてのmodifyDbチェックボックスを取得し、各要素で.each()a という関数を使用しました。.click()これは視覚的に機能します。チェックボックスは切り替えられますが、ajax 呼び出しは行われません。

これは、ajax 呼び出しが速すぎるためですか? どういうわけか関数呼び出しをキューに入れることはできますか?

4

3 に答える 3

4

を使用しtriggerます。
次のコードonclickは、すべての.modifyDb

function clickAll() {
    $('.modifyDb').trigger('click');
}

参照

于 2013-03-28T18:25:32.567 に答える
2

これを並べ替えて、すべてのインライン イベント ハンドラを削除します。このようなもの:

<input class='masterCheckbox' type='checkbox' />

<input class='modifyDb' type='checkbox' data-id='someId)' />
<!-- .... -->

そして、それらをバインドします:

$(".modifyDb").click(function() {
    var id = $(this).data("id");
    ajaxCall(id);
});

マスター チェック ボックスの場合:

$(".masterCheckbox").click(function() {
    $(".modifyDb").each(function() {
        var id = $(this).data("id");
        ajaxCall(id);
        // or if you really must, you could use trigger() here
    })
});
于 2013-03-28T18:31:15.937 に答える
1

これにより、まだチェックされていないボックスでクリックイベントがトリガーされます

function clickAllUnchecked(){
    $('.modyfDb').not(':checked').trigger('click')
}
于 2013-03-28T18:30:08.997 に答える