2 つのオプション (どちらもtr:not
既存のコードから要素を削除する必要がありますが、これは機能しません。tr
要素をチェックボックスにすることはできず:not
、その内容ではなく要素をチェックします):
を呼び出すチェックボックスにイベント ハンドラを追加しますe.stopPropagation
。その後、クリックイベントは行に到達しません。これは、直接または委任を介して行うことができます。これは、直接行っているライブの例です。label
間接的に行う場合は、サポートする予定のすべてのブラウザーで、チェックボックスをアクティブにするクリックを必ずテストしてください (それらを使用する場合)。
また
これをハンドラーに追加します。
if ($(event.target).is('input[type=checkbox]')) {
return;
}
例えば:
$('table').on('click', 'td', function(event) {
if ($(event.target).is('input[type=checkbox]')) {
return;
}
// Logic here
});
これは、イベントのソースをテストしてチェックボックスであるかどうかを確認し、早期に救済することで機能します。
どちらの場合も、 a を使用しlabel
てチェックボックスをアクティブにする場合、ラベルに対して同じことを行う必要がある場合があります。
#2 が s を処理するように見えることに興味がlabel
ありましたが、関数に移動するのに十分なコードであることがわかりましたが、難しいことではありません。ソース
jQuery(function($) {
// The table cell click handler
$("table").on("click", "td", function(e) {
// Is the source a checkbox or the label for
// one?
if (isCheckbox($(e.target))) {
return;
}
// Normal handling
$(this).toggleClass("foo");
});
// Function to test whether the source is a
// checkbox, or the label of a checkbox
function isCheckbox($elm) {
var chkid;
if ($elm.is("input[type=checkbox]")) {
return true;
}
if ($elm.is("label")) {
chkid = $elm.attr("for");
if (chkid) {
return $("#" + chkid).is("input[type=checkbox]");
}
return !!$elm.find("input[type=checkbox]")[0];
}
return false;
}
});