2016-06-23 5 views
1

私のjsでは、各テーブル行に対してクリックイベントを設定しました。 これは正常に動作します。 この表の最後の列だけのクリックイベントを削除しようとしましたが、動作しません。最後の列のクリックイベントを無効にする

理由はありますか?セレクタは正しいのですか?それとも、tdの最後の子以外のものを選択する必要がありますか?

function addRowHandlers() { 
var table = document.getElementById("klauselliste"); 
var rows = table.getElementsByTagName("tr"); 
for (i = 0; i < rows.length; i++) { 
    var currentRow = table.rows[i]; 
    var createClickHandler = 
     function (row) { 
      return function() { 
       var cell = row.getElementsByTagName("td")[0]; 
       var name = cell.innerHTML; 
       window.location.href = '/Klausel/Detail?Name=' + name.trim(); 
      }; 
     }; 

    currentRow.onclick = createClickHandler(currentRow); 
} 



// Code Snippet 
addRowHandlers(); 
$("td:last-child").unbind("click"); 
// Code Snippet 
+0

「$( "td")。last()。off( "click"); 'を試してください。しかし、jQueryでhtmlイベントをバインドすることができない場合は、jQueryで作成されていないときはわかりません。なぜそれを 'html方法'で作成するのですか?jQueryでそれを解除しますか? – eisbehr

+0

少なくとも 'rows.length - 1'を使用してください...しかし、このすべてのコードの代わりに、jQueryを使用して関連するクリックイベントをバインドしてください。 –

答えて

0

コードを「pure jQuery」として再作成しました。少ないコード、同じ努力。 :not(:last-child)に注意してください。tdの行がすべて選択され、最後の行はexecptされます。

function addRowHandlers() { 
    $("table#klauselliste tr td:not(:last-child)").click(function() { 
     var name = $("td:eq(0)", $(this).parent()).html(); 
     window.location.href = '/Klausel/Detail?Name=' + name.trim(); 
    }); 
} 

作業例についてはこちらをご覧ください:https://jsfiddle.net/wuhtt7sc/1/

+0

ありがとうございます。私がこれを好きなら、 "Klausel.js:21 Uncaught ReferenceError:$が定義されていません"というエラーが発生します。私はそのテーブルがまだ完全に読み込まれていないと思う。 –

+0

いいえ、これは、この時点でjQueryが正しくロード/インクルードされていないことを意味します。この拳を確認してください。そして、あなたのコードをjQueryの準備状態で呼び出すようにしてください: '$(function(){/ *あなたの行動* /}); – eisbehr

+0

素晴らしいです! JQueryはVisual Studioのバンドルに含まれていますが、遅くまでありがとう^^ありがとうございます –

0

あなたのテーブルの上に最後の要素を見つけるために.find()を使用してみてください。

$('#klauselliste tr').find('td:last').on('click', function (e) { 
e.preventDefault(); 
e.stopPropagation(); 
}); 
+1

もしそうなら、なぜ複雑になるのですか? '$( '#klauselliste tr td:last')。off(" click ");そして完了です。 – eisbehr

+0

あなたは正しい@eisbehrです。私を修正してくれてありがとう。 =) – requenaxii