検索に一致したすべてのチェックボックスをクリックする関数を取得するのに問題があります。クリックイベントが発生するようですが、チェックボックスがチェックされたりmyFunc()
呼び出されたりすることはありません。
各チェックボックスを手動でクリックすると完全に機能しますが、私のユーザーではなく、40以上のチェックボックスでそれを実行したいのは誰ですか。
入力チェックボックスに直接ではなく、div-onclick を使用する理由を不思議に思うかもしれません。これは、ユーザーが小さなチェックボックスよりもクリックできる領域を大きくしたいからです。
特定の属性値に一致する複数のチェックボックスを選択するための単一のハイパーリンクをユーザーに提供したいと考えています。
HTML
<div id="container">
<a href="#" onclick="clickAndCheckAllMatch('search for this text');return false;">some text</a>
<div id="*actual_ID*" onclick="myFunc(a, b, c, d);">
<input type="checkbox" id="book-*actual_ID*" onclick="this.parentNode.click;return false;">
</div>
</div>
JS
function myFunc(a, b, c, d) {
// does stuff
}
function clickAndCheckAllMatch(value) {
$('div[onclick*='+value+']').each(function(idx,e){
$('book-'+this.id).click();
}
EDIT divからlabel
に変更したとき、チェックボックスの状態を修正する必要はありませんでした。divまたは block-element には何らかの問題があるはずです。また、 div
から onclick を削除しました。これは、チェックボックスを直接ターゲットにして、それらの ID 値をactual_IDだけに変更できることを意味しました。
function clickAndCheckAllMatch(value) {
$('input[onclick*='+value+']').each(function(idx,e){
// e == this
$(this)[0].click();
if ($(this).attr('disabled')) {
//do nothing
} else {
if ($(this).attr('checked')) {
//do nothing
} else {
$(this)[0].click(); // only one checkbox per ID
}
}
});
}
function CheckAll() {
$('#container input[type=checkbox]:not(:checked)').each(function(idx,e){
$(this).click(); // notice the difference ?
});
}