2012-02-10 4 views
0

から要素を除外する私が使用してクリックイベントハンドラから画像を除外しようとしています:は、イベントハンドラ

$('#templtable .trhover *:not(#infoimg)').live('click', function(event) { 
     event.stopPropagation(); 
     $(this).toggleClass('selected'); 

$('#infoimg').click(function(event) { 
      console.log("infoimg"); 
    event.stopPropagation(); 
}); 

を、表には次のようになります。クリックイベントがまだアクティブであるしかし

<table><tr class='trhover'><td><img id='infoimg' src='/images/icon-info.gif' alt='Details'><input type='checkbox' class='followup' id='1' value='234234'></td><td>234234</td></tr><table> 

画像では、これを解決する方法を提案しますか?

おかげ

+1

? – ggreiner

+0

イメージアイテム以外のtr(class = trhover)のすべてのアイテムについて。 –

答えて

3

コードが無効です。とにかく、imgがclickイベントを実行しないようにするには、セレクタ$('tr *:not(img)')を使用します。しかし、あなたがimgをクリックしている間、イベントが発生するとイベントが発生します。したがって、伝播を停止するには、イベントをバインドする必要があります。追加行でhttp://jsfiddle.net/pNaaD/
バージョン:

$('.trhover *:not(#infoimg)').bind('click', function(event) { 
    event.stopPropagation(); 
    $('body').append('click -> '+event.currentTarget.tagName+'<br />'); 
}); 
$('#infoimg').click(function(event) { 
    event.stopPropagation(); 
}); 

これを試してみてくださいhttp://jsfiddle.net/Zxk8R/あなたはクリックイベントが上に登録されたくない要素

+0

この解決法はあなたを幸せにするか、何か違うことを意味しましたか? – czerasz

+0

まずはありがとう。あなたの例はうまくいくようです。しかし、私のサイトではそうではありませんが、まったく同じです(上記の更新コードを参照)。これは、テーブルが動的に追加され、イメージも追加されるためですか? さらに私は、私の機能では、*:not(#infoimg)を追加することで、trの代わりにtdになったことに気付きました。何故ですか?そして、私はどのようにそれをtrに保つことができますか? –

+0

私は私の質問の最初の部分を解決しました。それは今働いている。画像が同じIDで複数回追加された理由は、最初の画像にのみイベントハンドラがあります。#infoimgを.infoimgに変更しました。私の質問の第二の部分についてあなたは何か考えていますか? –

0

悪い悪いコード...
まず、あなたがあなたの<tr>を閉じていない、余分な</td>が代わりにあります。
第2に、end()は、とにかく正しく使用されていないフィルタをキャンセルし、live()イベントは非推奨です。on()を使用する必要があります。
をクリックは、あなたがすべき.trhoverに動作するようになっている場合:

$('.trhover').on('click', function(){}); 

click()イベントを受け取ら<img>を停止するには、czeraszが提案何を行うことができます。
また、チェックボックスは何を対象としていますか、なぜそれをフィルタリングしましたか?

関連する問題