2

各テーブル行にjQuery をon()適用しました。ユーザーが任意の行をクリックすると、別のページの読み込みが開始されます。

table_tag.on("click", "tbody tr", function(event) {                
    var search_id = datatable.fnGetData(this)[0];                                
    if(event.ctrlKey) {                                                                                        
        window.open("/search/"+search_id+"/");
    } else {
        window.location.assign("/search/"+search_id+"/");
    }
});

テーブルに新しい列を追加しました。その各セルには、チェックボックスが 1 つだけあります。

<td><input type="checkbox" /></td>

ユーザーがこのチェックボックスをクリックした後に別のページが読み込まれないようにする必要があります。私はこれを試しました:

table_tag.off("click", "tbody tr td input:parent")

しかし、それは機能していません。どうやってやるの?

4

2 に答える 2

2

にハンドラーがありません"tbody tr td input:parent"。にハンドラが 1 つだけあります"tbody tr"

代わりに、何にバインドするかにもっと注意してください"tbody tr :not(input:checkbox)"

編集: popnoodles が言うように、質問は明確ではありません。上記は、ユーザーがチェックボックスをクリックしたときに新しいページが読み込まれないようにするためのものです(そうしないと、チェックボックスが多少役に立たないと思います)。チェックボックスが設定されている行をクリックした場合に新しいページを開くことを禁止することが目的である場合、これは私が見ることができる質問の別の解釈であり、上記のパッチをセレクターに適用し、さらに内部からチェックボックスの状態を確認しますハンドラー。

EDIT2: コロンが欠落しているエラーがありました。not(...)は正しくありません:not(...)

編集が多すぎる: Fiddle、 with tbody tr td:not(:has(input:checkbox)).

于 2012-12-13T00:32:04.953 に答える
0

現在、td からクリック イベントを削除しようとしていますが、それを tr に適用しました。

あなたが達成しようとしていることはあいまいです。何かを一度だけ実行しようとしている場合は、one() を使用します。

table_tag.one("click", "tbody tr", function(event) {   ...

または、チェックボックスのクリックがバブルアップしてtrのクリックをトリガーしたくない場合

table_tag.on("click", "tbody tr", function(event) { 
     if (this.target!=event) return; // will ONLY catch the tr being clicked
     ...

または、他の何か

于 2012-12-13T00:36:39.207 に答える