2016-12-30 7 views
1

ここで見つけたjQueryスクリプトを使用して、テーブルの行をハイライト表示/非表示にしています。スクリプトは次のとおりです。動的に追加された要素に対してjQueryイベントが正しく機能しない

$(".clickable-row").click(function(){ 
if($(this).hasClass('row-highlight')) 
    $(this).removeClass('row-highlight'); 
else 
    $(this).addClass('row-highlight').siblings().removeClass('row-highlight'); 

}

私のテーブルのすべての行は、クラスのクリック可能な行を持っています。

これは、ユーザーがボタンをクリックしたときに動的に行が追加されたテーブルを導入するまで、うまくいきました。その表では、動的に追加された行は強調表示されません。

私は任意の手段によってjQueryの専門家ではないが、いくつかの研究の後、私はイベントの委任を使用することにより、動的に追加された行がクリック可能であるべきことがわかったので、私はこれに私のスクリプトを変更:

$(".clickable-row").on("click", "td", function() { 

if ($(this).parent().hasClass('row-highlight')) { 
    $(this).parent().removeClass('row-highlight'); 
} else { 
    $(this).parent().siblings().removeClass('row-highlight'); 
    $(this).parent().addClass('row-highlight'); 

} 

});

これは静的テーブルでは問題なく動作しますが、動的に追加された行では機能しません。

私は動的に追加された行のHTMLをチェックしていると、彼らは次のようになります。

<tr class="clickable-row"> 
<td>some text here</td> 
<td class="hidden"><input type="text" name ="ID2" value="2"></td> 

HTML構造が同じテーブル内の既存の行と全く同じです。行はタグ内に含まれます。

どこが間違っていますか?

編集:何らかの理由で、コードブロックが正しく表示されません。 htmlの例の最後に "/ tr"タグがありますが、質問には表示されません。

+0

.clickable行を実行する(静的親)テーブルにイベントをアタッチしようとすると、あまりにも、動的要素であるので。 – sinisake

答えて

0

特に大規模なテーブルの上に非効率的であるすべての行にハンドラを結合する.clickable-rowに取り付けます。テーブルにバインドする方が良いでしょう。

$('table').on('click', 'tr td', function(e) { 
    alert('click') 
}); 

これは新しいセルをクリックします。個々のセルの代わりにクリックしたい行全体の場合は、ちょうどtrを使用してください。

はここに例を示しますhttp://jsfiddle.net/es8rLhpt/2/

+0

あなたjsfiddleので、私はこのアプローチをしようとします動作します。あなたはあなたと結びついていると思いますか?テーブルの代わりにクリック可能な行が問題でしたか?私のスクリプトはもともとはそれができなかったtrビットに縛られていました。 – Pete

+0

ちょうどこのアプローチを試して、それが答えとして受け入れられるようにそれを受け入れました – Pete

0

それはあなただけのバインド解除および再バインドする必要があります.click()イベントで動作することができます。

あなたが追加された新しい細胞のためにもう一度あなたのテーブルのセルに「クリック」イベントをバインドする必要があるコードを実行します。

はまた再びイベントリスナーをバインドする前にイベントリスナーをバインド解除することを確認してください。

この場合

$(".clickable-row").unbind("click"); 

次いで

$(".clickable-row").click(function(){ 
    if($(this).hasClass('row-highlight')) 
     $(this).removeClass('row-highlight'); 
    else 
     $(this).addClass('row-highlight').siblings().removeClass('row-highlight'); 
} 
+0

ありがとう、私はイベントの委任がなぜ機能しないのか分からない場合、私はそれを試みるかもしれません。 – Pete

関連する問題