2012-04-12 15 views
0

Mit jQuery Hover wie überprüfen Sie, ob Sie gerade auf dem gleichen Element geblieben sind? Sagen wir, ich habe zwei Kästchen und schwebe auf Feld 1, dann links, dann komm zurück und schwebe auf demselben Feld. Ich möchte den Wert des initial hovered Elements speichern (Box 1) und dann vergleichen, ob es gleich ist, wenn ich zurückkehre.jQuery Hover auf dem gleichen Element

Danke !!

+0

Wollen dies nur geschehen, wenn Sie auf dem gleichen Element schweben Sie nur schwebten auf? Oder wenn Sie mehr als einmal auf ein Element klicken? Das sind zwei verschiedene Situationen mit zwei verschiedenen Lösungen, die beide in den Antworten unten beschrieben sind ...;) –

Antwort

2

so etwas wie unten Versuchen Sie,

var lastHovered = ''; 

$('#box1').hover(function() { 
    if (lastHovered == 'box1') { 
     alert('You have hovered on this already'); 
    } 
    lastHovered = 'box1'; 

    //Your stuff 
}, function() { 
    //mouse out stuff 
}); 

$('#box2').hover(function() { 
    if (lastHovered == 'box2') { 
     alert('You have hovered on this already'); 
    } 
    lastHovered = 'box2'; 

    //Your stuff 
}, function() { 
    //mouse out stuff 
}); 

Hinweis: Ich habe 2 Funktionen verwendet, die box1 schweben und box2 schweben unter der Annahme hat ganz andere Funktionen ... Wenn Sie es nicht innerhalb derselben Funktion und Verwendung haben this.id, um sie zu gruppieren .. siehe unten.

var lastHovered = ''; 

$('#box1, #box2').hover(function() { 
    if (lastHovered == this.id) { //<-- used this.id instead of hard-coded value 
     alert('You have hovered on ' + this.id + ' already'); 
    } 
    lastHovered = this.id; //<-- used this.id instead of hard-coded value 

    //Your stuff 
}, function() { 
    //mouse out stuff 
}); 
+0

Wenn Sie 'this' zu' lastHovered' zuweisen, anstatt fest codierte Werte zu verwenden, können Sie denselben Callback für verwenden beide Elemente. '$ ('# box1, # box2'). hover (...' –

+0

Die Verwendung von 'this' ist ein guter Vorschlag, aber eine einfache Zeichenfolge ist viel kleiner (prob' this.id' ist ein guter Weg zu gehen). Ans verwendet dieselbe Hover-Funktion, hängt davon ab, was OP versucht zu tun.Es könnte in jedem Hover völlig unterschiedliche 'Stoffe' enthalten. –

+1

' this' ist eine Objektreferenz, die kleiner als eine Zeichenkette sein sollte ... hängt jedoch von der Situation ab, könnte die Hover ketten und 'event.stopImmediatePropagation()' verwenden, um damit umzugehen .. –

0

Verwenden .data() http://api.jquery.com/data/ so auf den ersten schweben in der Callback wie etwas zu tun

if (!$(this).data('var')) { 
    $(this).data('var','value'); 
} else { 
    console.log($(this).data('var')); 
}; 
+0

gute Idee, aber der Wert von $ (this) ändert sich pro Element und greift auf den 'vorherigen Hover' zu. data() -Objekt wäre grob – DefyGravity

+0

Wenn Sie die Frage lesen, nach der das Poster fragt, ist es eine Möglichkeit, das gleiche Element erneut zu bewegen, um zu verfolgen, dass dieses Element bereits verschoben wurde Das letzte Element, das auf jedem Element schwebt, das schweben kann. Also würde .data nur justieren t das. Deshalb hat die Frage einen Kommentar, der nie beantwortet wurde. – GillesC

0
var lastHovered = null; 
$('#selector1,#selector2,#selector3').hover(function (evt) { 
    if(lastHovered && lastHovered === $(this).attr("id")){ 
//code for 're-hovering' 
    }else{ 
//code for 'new hover' 
    } 
}, function (evt) { 
    //mouse out stuff 
    lastHovered = $(this).attr("id"); 
});