2016-04-21 14 views
3

Wenn ich über ein Feld auf einer Tabelle schwebe, anhänge ich ein div zu diesem Feld und zeige etwas Text in dem neu hinzugefügten Feld (ein Tooltip). Wenn ich den Mauszeiger über das Tabellenfeld halte, möchte ich, dass es geschlossen wird, aber ich möchte, dass es so lange geöffnet bleibt, wie ich innerhalb des untergeordneten Elements (dem neu hinzugefügten div) bin. Es funktioniert gut auf Chrome, aber nicht in FF/IE: Hover-Eigenschaft funktioniert nicht auf Firefox/IE

$(document).ready(init); 

function init(){ 
    $('table td.column_5').on('mouseover', show_tooltip); 
    $('.tooltip, table td.column_5').on('mouseout',remove_tooltip); 
} 
function show_tooltip(e){ 
    if ($(e.target).text() !== '' && !$(this).children().hasClass('tooltip')){ 
     var tooltip = '<div class="tooltip">'+$(e.target).text()+'</div>'; 
     $(this).append(tooltip); 
    } 
} 
function remove_tooltip(e){ 
    if ($(this).children().hasClass('tooltip') && !$(this).children('.tooltip').is(':hover')){ 
    $('.tooltip').remove(); 
} 
+2

'ist (‚: hover‘)' ist nicht etwas, das Sie verwenden sollten, gibt es [richtigen Wege zu prüfen, ob das ein Element schwebte ist] (http://stackoverflow.com/ Fragen/1273566/how-do-i-check-wenn-die-Maus-ist-über-ein-Element-in-jquery/1273609 # 1273609) – adeneo

Antwort

1

ich einen Weg, es zu tun gefunden! Hier ist, wie ich vorgegangen:

$(document).ready(init); 

function init(){ 
    $('table td.column_5').on('mouseover', show_tooltip); 
    $('.tooltip, table td.column_5').on('mouseout',remove_tooltip); 
} 
function show_tooltip(e){ 
    if ($(e.target).text() !== '' && !$(this).children().hasClass('tooltip')){ 
     var tooltip = '<div class="tooltip">'+$(e.target).text()+'</div>'; 
     $(this).append(tooltip); 
    } 
} 
function remove_tooltip(e){ 
    var event = e.toElement || e.relatedTarget; 

    if (event.parentNode == this || event == this){ 
     return; 
    } 

    $('.tooltip').remove();  
} 
3

OK ich schaute genauer hin. Bitte entferne den Downvote jetzt :) hier ist was falsch.

function remove_tooltip(e) { 
    if ($(this).children().hasClass('tooltip') && !$(this).children('.tooltip').is(':hover'){ 
    $('.tooltip').remove(); 
} 

Sie vermissen eine Schließung) und eine Schließ} zum Beispiel unter den Code verwenden

$(document).ready(init); 

function init(){ 
    $('table td.column_5').on('mouseover', show_tooltip); 
    $('.tooltip, table td.column_5').on('mouseout',remove_tooltip); 
} 
function show_tooltip(e){ 
    if ($(e.target).text() !== '' && !$(this).children().hasClass('tooltip')){ 
     var tooltip = '<div class="tooltip">'+$(e.target).text()+'</div>'; 
     $(this).append(tooltip); 
    } 
} 
function remove_tooltip(e) { 
    if ($(this).children().hasClass('tooltip') && !$(this).children('.tooltip').is(':hover')){ 
    $('.tooltip').remove(); 
    } 
} 
+0

Das OP nicht sagen, dass sie bootstrap verwenden? – ste2425

+0

Nein, kein Bootstrap – Sebastian

+0

@Sebastian Ich habe meine Antwort aktualisiert. –

Verwandte Themen