2010-12-23 3 views
0

Ich bin mir sicher, dass dies eine einfache Frage ist, aber keine zutreffenden Antworten hier angezeigt. Ich habe Code wie folgt bekommen:jQuery: Bindet JS-Funktion an alle ausgewählten Elemente

$('.thumbImg').mouseout(function(){selectCur()}); 
//selectCur() is a pure-JS function defined elsewhere in the document 

Aber die Funktion nur auf das erste Element mit Klasse .thumbImg gebunden ist. Normalerweise würde ich eine $(this) verwenden, aber das wird hier nicht funktionieren (es sei denn, ich mache etwas falsch).

Ich denke, mein letzter Ausweg für Schleife ein, aber ich bin sicher, gibt es einen Weg, das zu vermeiden.

Danke!

+0

Das Problem liegt wahrscheinlich in 'selectCur()'. Dieser Code bindet den Handler an alle .thumbImgs. –

+0

Richtig du bist. Ich hatte selbst ein gutes, altmodisches Cache-Problem. – Nathan

Antwort

0

Glauben Sie nicht, es ist ein Cache-Problem, es ist ein Kontext Problem. Beheben Sie es, indem Sie $ this an Ihre selectCur übergeben.

$('.thumbImg').mouseout(function(){selectCur($(this))}); 

Oder sogar

$('.thumbImg').mouseout(selectCur); 

Dann selectCur können $ (this) verwenden; Ich denke, die erste Lösung ist besser, da selectCur von anderen Orten aus verwendet werden kann, so dass Sie den Knoten bei Bedarf einfach weiterleiten können.

+0

Ich benutze Sie erste Zeile. Vielen Dank! – Nathan

1

Der Grund this funktioniert nicht, dass es in Ihrem Code lokal function() {} ist, nicht die selectCur() Funktion.

Wenn Sie this in selectCur() verwenden möchten, können Sie es gerne tun:

$('.thumbImg').mouseout(selectCur);

Die Art und Weise Sie tun, ist es eine anonyme Funktion/Schließung, die Ihre Funktion aufruft, und dass in mouseout verweisen . Statt dessen müssen Sie lediglich auf Ihre Funktion zeigen (nicht auf () hier klicken) und sie wird aufgerufen, wenn das Ereignis ausgelöst wird. Sie benötigen keine Funktion, um auf eine Funktion zu zeigen. Zeigen Sie einfach darauf und es wird funktionieren.

Verwandte Themen