Ich bin neu in jQuery und habe nach dem Tutorial in JavaScript und jQuery Registerkarten erstellt. Das fehlende Handbuch enthält die erste Zeile, wenn der Autor dies tut:
var target = $(this);
Aber ich habe es so versucht
var target = evt.target;
und ich habe diesen Fehler bekommen:
Uncaught TypeError: Object http://localhost/tabbedPanels/#panel1 has no method 'attr'
Und als ich evt.target
zurück zu $(this)
wechselte, funktionierte es wie ein Zauber.
Ich möchte wissen, was der Unterschied zwischen $(this)
und ist evt.target
.
Hier ist mein Code, falls Sie ihn brauchen:
index.html:
<!DOCTYPE html>
<html>
<head>
<title>Tabbed Panel</title>
<style>
body {
width : 100%;
height: 100%;
}
#wrapper {
margin : auto;
width : 800px;
}
#tabsContainer {
overflow: hidden;
}
#tabs {
padding:0;
margin:0;
}
#tabs li {
float : left;
list-style:none;
}
#tabs a {
text-decoration:none;
padding : 3px 5px;
display : block;
}
#tabs a.active {
background-color : grey;
}
#panelsContainer {
clear: left;
}
#panel1 {
color : blue;
}
#panel2 {
color : yellow;
}
#panel3 {
color: green;
}
#panel4 {
color : black;
}
</style>
<script type="text/javascript" src="jquery-1.8.0.min.js"></script>
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<div id="wrapper">
<div id="tabsContainer">
<ul id="tabs">
<li><a href="#panel1">Panel1</a></li>
<li><a href="#panel2">Panel2</a></li>
<li><a href="#panel3">Panel3</a></li>
<li><a href="#panel4">Panel4</a></li>
</ul>
</div>
<div id="panelsContainer">
<div id="panel1" class="panel">
this is panel1
</div>
<div id="panel2" class="panel">
this is panel2
</div>
<div id="panel3" class="panel">
this is panel3
</div>
<div id="panel4" class="panel">
this is panel4
</div>
</div>
</div>
</body>
</html>
script.js:
$(function(){
$("#tabs a").click(function(evt){
var target = evt.target,
targetPanel = target.attr("href");
$(".panel").hide();
$("#tabs a.active").removeClass("active");
target.addClass("active").blur();
$(targetPanel).fadeIn(300);
evt.preventDefault();
});
$("#tabs a:first").click();
})
javascript-events
this
jquery
Rafael Adel
quelle
quelle
this
ist eine Referenz auf das JavaScript-DOM-Element.$()
ist das von jQuery bereitgestellte Format, um das DOM-Element in ein jQuery-Objekt umzuwandeln. Wennevt.target
Sie auf ein Element verweisen,$(this)
verweisen Sie auf ein Objekt mit Parametern, auf die wir Zugriff haben.$(evt.target)
und (in diesem Fall) auch die gleichen Ergebnisse erzielen. Die.attr()
Methode wird vom jQuery-Objekt bereitgestellt, nicht vom Element selbstAntworten:
Es gibt einen Unterschied zwischen
$(this)
undevent.target
und einen ziemlich bedeutenden. Währendthis
(oderevent.currentTarget
siehe unten) sich immer auf das DOM-Element bezieht, an das der Listener angehängt wurde,event.target
handelt es sich um das tatsächliche DOM-Element, auf das geklickt wurde. Denken Sie daran, dass aufgrund von Ereignisblasen, wenn Sie habenund hängen Sie den Click-Listener an das äußere Div an
Dann
handler
wird das aufgerufen, wenn Sie sowohl in das äußere als auch in das innere Div klicken (es sei denn, Sie haben einen anderen Code, der das Ereignis auf dem inneren Div behandelt und die Weitergabe stoppt).Wenn Sie in diesem Beispiel in das innere Div klicken, klicken Sie auf
handler
:this
bezieht sich auf das.outer
DOM-Element (da dies das Objekt ist, an das der Handler angehängt wurde)event.currentTarget
bezieht sich auch auf das.outer
Element (da dies das aktuelle Zielelement ist, das das Ereignis behandelt)event.target
bezieht sich auf das.inner
Element (dies gibt Ihnen das Element, von dem das Ereignis stammt)Der jQuery-Wrapper umschließt
$(this)
nur das DOM-Element in einem jQuery-Objekt, sodass Sie darauf jQuery-Funktionen aufrufen können. Sie können das gleiche mit tun$(event.target)
.Beachten Sie auch, dass wenn Sie den Kontext von neu binden
this
(z. B. wenn Sie Backbone verwenden, dies automatisch erfolgt), dies auf etwas anderes verweist . Sie können immer das eigentliche DOM-Element von abrufenevent.currentTarget
.quelle
currentTarget
ist immer derjenige mit dem Handler, dh. der äußerethis
ist eine Referenz für das DOM-Element, für das das Ereignis behandelt wird (das aktuelle Ziel).event.target
bezieht sich auf das Element, das das Ereignis ausgelöst hat. Sie waren in diesem Fall die gleichen und können es oft sein, aber sie sind nicht unbedingt immer so.Sie können sich ein gutes Bild davon machen , indem Sie die jQuery-Ereignisdokumente lesen , aber zusammenfassend:
Um die gewünschte Funktionalität mit jQuery zu erhalten, müssen Sie sie mit:
$(this)
oder in ein jQuery-Objekt einschließen$(evt.target)
.Die
.attr()
Methode funktioniert nur mit einem jQuery-Objekt, nicht mit einem DOM-Element.$(evt.target).attr('href')
oderevt.target.href
geben Sie einfach , was Sie wollen.quelle
Es gibt einen signifikanten Unterschied darin, wie jQuery diese Variable mit einer "on" -Methode behandelt
Wenn Sie dies vergleichen mit: -
quelle
http://api.jquery.com/on/ heißt es:
Wenn wir haben
Überprüfen Sie die folgende Ausgabe:
Beachten Sie, dass ich benutze
$
das dom-Element umschließe, um ein jQuery-Objekt zu erstellen, wie wir es immer tun.Sie würden das für den ersten Fall
this
findenevent.currentTarget
.event.target
sind alle auf das gleiche Element verwiesen.Während im zweiten Fall, wenn der Ereignisdelegierte an ein umschlossenes Element ausgelöst wird,
event.target
auf das ausgelöste Element verwiesen wird, währendthis
undevent.currentTarget
nach verwiesen werden , wo das Ereignis geliefert wird.Für
this
undevent.currentTarget
sind sie laut http://api.jquery.com/event.currenttarget/ genau dasselbe.quelle
Hier gibt es browserübergreifende Probleme.
Ein typischer Nicht-jQuery-Ereignishandler wäre ungefähr so:
jQuery normalisiert
evt
und stellt das Ziel wiethis
in Ereignishandlern zur Verfügung. Ein typischer jQuery-Ereignishandler wäre also ungefähr so:Ein hybrider Ereignishandler, der
evt
jQuerys normalisiertes und ein POJS-Ziel verwendet, wäre ungefähr so:quelle
Innerhalb einer Ereignishandlerfunktion oder Objektmethode besteht eine Möglichkeit, auf die Eigenschaften des "enthaltenden Elements" zuzugreifen, darin, das spezielle Schlüsselwort this zu verwenden. Das Schlüsselwort this repräsentiert den Eigentümer der Funktion oder Methode, die gerade verarbeitet wird. So:
Für eine globale Funktion repräsentiert dies das Fenster.
Bei einer Objektmethode repräsentiert dies die Objektinstanz.
In einem Ereignishandler stellt dies das Element dar, das das Ereignis empfangen hat.
Beispielsweise:
Der Inhalt der Warnfenster nach dem Rendern dieses HTML-Codes lautet:
Ein Ereignisobjekt ist allen Ereignissen zugeordnet. Es verfügt über Eigenschaften, die Informationen "über das Ereignis" bereitstellen, z. B. die Position eines Mausklicks auf der Webseite.
Beispielsweise:
Der Inhalt der Warnfenster nach dem Rendern dieses HTML-Codes lautet:
quelle