2009-05-18 11 views
12

jQueryコードにいくつか問題がありますが、解決策が比較的簡単だと思っています。 テーブル行のイベントをクリックする - 他に何もクリックされていなければトリガーするだけです

は、私のようなテーブルがあるとしましょう:

JavaScriptを通じ今
<table> 
    <tr> 
    <td><input type="checkbox" name="hai" value="der" /></td> 
    <td><a href="mypage.php">My link</a></td> 
    <td>Some data</td> 
    <td>Some more data</td> 
    </tr> 
    ... 
</table> 

I)(jQueryの中で、次の(ドキュメント).readyを行います。

jQuery("table tr").click(function(){ 
    var row = jQuery(this); 
    var hasClass = row.hasClass("highlight"); 
    jQuery("table tr").removeClass("highlight"); 
    if(!hasClass){ 
    row.addClass("highlight"); 
    } 
}); 

このすべてが非常に簡単なものである - 私は、行をクリックし、それが強調表示されていると、一列のみが一度に強調表示することができます持っていることができるようにしたい(もちろん私の実際のコードでは、私はそれ以上のことを - )今ここに私の問題だ:

ユーザーがアンカータグ、またはチェックボックスをクリック

、これは同様に、行をクリックしてイベントをトリガし、私はそれをフィルタリングする方法を考え出すことはできませんか?私はクリックハンドラにイベントを含める必要があることを知っていますが、できるだけ多くのブラウザで動作するような方法でこれをチェックする方法はありますか?

答えて

15

は、イベントをクリックして、バブルアップからのイベントを停止するように反応する他の要素にハンドラを追加してみてください。これはあなたがすでに持っているものに加えてあります。

jQuery('table input, table a').click(function(e) { 
    e.stopPropagation(); 
    return true; 
}): 
+0

あなたは、これが実際に何を意味するのか説明してくださいできますか? – darkapple

+2

@darkappleイベントは、上位レベル要素のハンドラにDOMをバブルアップします。伝播を停止することによって、ブラウザはイベントをこれらの要素まで渡さないように指示し、ハンドラは決して呼び出されません。 trueを返すと、要素のデフォルトアクションが継続されます(たとえば、リンクを新しいページに移動するなど)。この場合、リンクまたはチェックボックスがクリックされた場合に行のハイライトが呼び出されないハンドラは呼び出されませんが、行の他のものがある場合は呼び出されません。 – tvanfosson

+0

清算してくれてありがとう。本当のリターンの使用は何だったのだろうか。 – darkapple

1
$("table tr").click(function(e){ 

if (e.target instanceof HTMLInputElement || e.target instanceof HTMLAnchorElement){ 
return; 
} 
var row=$(this); 
$('table tr').removeClass('highlight'); 
row.addClass('highlight','normal'); 

}) 
3
$("table tr").click(function(event){ 
    if (event.currentTarget.tagName != "TR") { return; } 

    $(this).closest("table").find("tr.highlight").removeClass("highlight"); 
    $(this).addClass("highlight"); 
}); 
関連する問題