2013-03-06 10 views
5

私は自分のページに「ヘルプ」領域を持っており、ユーザーがテーブルの上を移動するとヘルプ情報が更新されるはずです。問題はテーブル内にあります。各行の1つのセルにチェックボックスがあり、そのチェックボックスをユーザーがホバーすると、チェックボックスのmouseoverイベントでテーブルイベントをオーバーライドし、チェックボックスのヘルプを表示します。現在、テーブルのマウスオーバーは正常に機能しますが、チェックボックスにマウスを重ねると何も起こりません。 mouseover以来親要素にマウスオーバーがある場合でも、子要素に対してmouseoverイベントを発生させるにはどうすればよいですか?

<table class="myTable"> 
    <tr> 
     <th>Col1</th> 
     <th>Col2</th> 
    </tr> 
    <tr> 
     <td><input class="myCheckbox" type="checkbox" /></td> 
     <td>Cell 2</td> 
    </tr> 
    <tr> 
     <td><input class="myCheckbox" type="checkbox" /></td> 
     <td>Cell 3</td> 
    </tr> 
</table> 

<div class="myHelpMenu"></div> 


$('.myCheckbox').mouseover(function() { 
    $('.myHelpMenu').html("this is my checkbox help"); 
}); 

$('.myTable').mouseover(function() { 
    $('.myHelpMenu').html("this is my tables help"); 
}); 

答えて

4

LIVE DEMO

これは、取得するために、純粋なJSを使用するよりも、mouseover推移している現在のtargetの要素を使用して検出するための良い方法です.tagNameあなたはメッセージリストオブジェクトを作成することができます所望のものを取り出すことができる。

$('.myTable').mouseover(function(e) { 

    var tag = e.target.tagName; 

    var messages = { 
    "INPUT" : "this is my checkbox help", 
    "TABLE" : "this is my tables help" 
    }; 

    $('.myHelpMenu').text(messages[tag]); 

}); 

あなたが好きあなたの情報メッセージをクリアしたい場合:

$('.myTable').on('mouseover mouseleave',function(e) { 

    var tag = e.target.tagName; 

    var messages = { 
    "INPUT" : "this is my checkbox help", 
    "TABLE" : "this is my tables help" 
    }; 

    $('.myHelpMenu').text(messages[tag]); 

    if(e.type=='mouseleave') 
    $('.myHelpMenu').empty(); 

}); 
+1

+1のコーディングスタイル – Popnoodles

+1

+1「ライブデモ」ボタン。 – Mercurybullet

+0

@Mercurybullet :)ありがとうhahahaしかし、それはちょうどボタン "甘さ"の場合は、+1を削除することができます:)(P.Sあなたは使用して虐待を自由にしている:D) –

0

テーブルのためだけではなく、mouseenterを呼び出して、全領域のためです。次に、mouseoutを追加して、テーブルから退出した後に再更新することができます。

+0

しかし課題は、入力チェックボックスがテーブル内にあるので、どのように私はテーブルのマウスアウトをトリガでしょうか? – silvster27

+0

多くの方法がありますが、ここではMercurybulletが最適な解決策を示しています。確かに非常に良い。 – Benjiman

3

テーブルまでのチェックボックスの伝播をマウスオーバーしたいと思うような音がしますか?

もしそうなら、これが必要です。

$('.myCheckbox').mouseover(function(e) { 
    $('.myHelpMenu').html("this is my checkbox help"); 
    e.stopPropagation(); 
}); 
+0

これは素晴らしい作品です! – silvster27

+0

うれしい私は助けることができました。答えがあなたの質問に答えるのを助けたならば、答えを受け入れたものとしてマークすることを忘れないでください。 :) – Mercurybullet

関連する問題