2013-03-06 3 views
5

Ich habe einen "Hilfe" -Bereich auf meiner Seite und wenn der Benutzer über eine Tabelle schwebt, sollten die Hilfeinformationen aktualisiert werden. Das Problem ist in der Tabelle Ich habe ein Kontrollkästchen in 1 Zelle jeder Zeile, und wenn der Benutzer über dieses Kontrollkästchen bewegt, möchte ich das Mouseover-Ereignis des Kontrollkästchens das Tabellenereignis überschreiben und für die Kontrollkästchen Hilfe angezeigt werden. Momentan funktioniert der Tabellenmouseover gut, aber nichts passiert, wenn ich die Maus über das Kontrollkästchen bewege.Wie kann ich ein mouseover -Ereignisfeuer für ein Kindelement haben, wenn das Elternelement auch einen MouseOver hat?

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

Antwort

4

LIVE DEMO

Dies ist eine nette Art und Weise mit mouseover das aktuellen target Elemente zu erfassen, das schwebte ist, als reinen JS mit dem .tagName Sie abrufen können ein Nachrichtenliste Objekt erstellen und den gewünschten abrufen.

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

}); 

Wenn Sie möchten, dass Ihre Informationen Meldung löschen mögen:

$('.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 für Codierungsstil – Popnoodles

+1

+1 für die süße "Live Demo" -Taste. – Mercurybullet

+0

@Mercurybullet :) danke hahaha, aber wenn es nur für den Button "Süße" ist, kannst du die +1 entfernen :) (P.S du bist frei zu benutzen und zu missbrauchen: D) –

0

Da die mouseover für die Tabelle ist für den gesamten Bereich, rufen Sie einfach mouseenter statt. Sie könnten dann eine mouseout hinzufügen, um nach dem Verlassen der Tabelle erneut zu aktualisieren.

+0

aber die Herausforderung ist das Eingangskontrollkästchen in der Tabelle ist, so wie würde ich die mouseout für die Tabelle auslösen? – silvster27

+0

Viele Möglichkeiten aber Mercurybullet hat hier die beste Lösung. Wirklich sehr gut. – Benjiman

3

Klingt, als ob Sie den Mouseover für das Kontrollkästchen haben wollen, um die Ausbreitung auf den Tisch zu stoppen?

Wenn ja, sollte dies tun.

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

Das funktioniert super !! – silvster27

+0

Ich bin froh, dass ich helfen konnte. Vergessen Sie nicht, eine Antwort als akzeptiert zu markieren, wenn sie dazu beigetragen hat, Ihre Frage zu beantworten. :) – Mercurybullet