2013-03-06 16 views
5

Mam "pomoc" obszaru na mojej stronie i kiedy użytkownik unosi się nad tabelą, informacje o pomocy powinny zostać zaktualizowane. Problem leży w tabeli Mam pole wyboru w 1 komórce każdego wiersza, a kiedy użytkownik unosi się nad tym polem wyboru, chcę, aby zdarzenie mouseover w polu wyboru przesłaniało zdarzenie table i aby wyświetlać pomoc. Obecnie najechanie kursorem na tabelę działa dobrze, ale nic się nie dzieje, gdy wskaźnik myszy znajduje się nad polem wyboru.W jaki sposób można wywołać zdarzenie mouseover dla elementu podrzędnego, jeśli element nadrzędny ma również najechanie kursorem myszy?

<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"); 
}); 

Odpowiedz

4

LIVE DEMO

Jest to dobry sposób, aby wykryć za pomocą mouseover aktualny target elementu, który unosił, niż przy użyciu czystego JS aby pobrać .tagName można utworzyć wiadomości lista obiektu i pobrać żądany.

$('.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]); 

}); 

Jeśli chcesz usunąć wiadomość informacji lubię:

$('.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 dla stylu kodowania – Popnoodles

+1

+1 dla słodkiego przycisku "Live Demo". – Mercurybullet

+0

@ Merercbullet :) dzięki hahaha, ale jeśli jest to po prostu dla przycisku "słodyczy", możesz usunąć +1 :) (P.S jesteś wolny w użyciu i nadużycie: D) –

0

Od mouseover na stole jest dla całego obszaru, po prostu zadzwoń mouseenter zamiast. Następnie możesz dodać mouseout, aby ponownie się zaktualizować po opuszczeniu stołu.

+0

ale wyzwaniem jest pole wejściowe jest w tabeli, tak jak bym wywołać mouseout na stole? – silvster27

+0

Wiele sposobów, ale Mercurybullet ma najlepsze rozwiązanie. Naprawdę bardzo dobre. – Benjiman

3

Wygląda na to, że chcesz najechać kursorem myszy na pole wyboru, aby zatrzymać propagację do stołu?

Jeśli tak, to powinno to zrobić.

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

Działa to świetnie! – silvster27

+0

Cieszę się, że mogę pomóc. Nie zapomnij zaznaczyć odpowiedzi jako zaakceptowanej, jeśli pomogła ci ona w rozwiązaniu odpowiedzi na twoje pytanie. :) – Mercurybullet