2016-04-23 2 views
0

私は画面上で編集できる長いテーブル(10,000行、10列)を持っています。編集後、変更を保存することができます。私はテーブル全体を再保存したくないので、変更が加えられた行を追跡したいと思います。各行タグには、一意のIDとtableタグがあります。しかし、.keyupを使うと$( 'tr')や$( 'td')ではなく$( 'table')だけで機能し、常にテーブルタグの値を返します。ここに私のhtmlコードの短い例です:keyupイベントが発生したテーブル行<tr>を特定する方法はありますか?

<table id="table1" contenteditable="true"> 
     <tr id="tr1"><td>Cell 11</td><td>Cell 12</td><td>Cell 13</td></tr> 
     <tr id="tr2"><td>Cell 21</td><td>Cell 22</td><td>Cell 23</td></tr> 
    </table> 

とjQueryで私のようないくつか試してみた:

$(document).ready(function() { 
     $('table').keyup(function(e) { 
     alert($(this).attr('id')); 
     }); 
    }); 

これを常に「TABLE1」になります。 'tr1'、 'tr2'などはどうすれば入手できますか?

答えて

2

e.targetを使用して、イベントを発生させた要素を確認してから、.closest("tr")を使用して親階層を上に移動して行を取得します。 FYI

$(document).ready(function() { 
    $('table').keyup(function(e) { 
    console.log($(e.target).closest("tr").attr("id")); 
    }); 
}); 

あなたは(<input>タグのような)フォーカスを受け入れることができるテーブルで何かを置くまで、あなたのテーブル内の任意のキーイベントを取得することができなくなります。

デモの作業:https://jsfiddle.net/jfriend00/1j7vkfma/

+0

が入力タグの完全なテーブルを置くことは私にとって非常に魅力的なようではありません! – Arnold

+0

しかし、.click関数は、なぜ.keyupではなく、必要な答えを与えるのですか? – Arnold

+0

@Arnold - あなたのHTMLはフォーカスを受け入れず、キーアップイベントを取得しません。私はちょうどそこに入力タグを入れました。なぜなら、あなたがキーアップイベントについて質問し、セル内でキーアップイベントを取得するためにフォーカスを受け入れるものがなければならないからです。あなたは何をしたいのかはっきりとHTMLを作ることができますが、キーアップイベントについて質問したので、提案されたソリューションをテストできるように、キーアップイベントを得るようなものを作らなければなりませんでした。私はあなたが '.click'について何を求めているのか分かりません。 – jfriend00

関連する問題