2016-05-04 9 views
2

Ich habe eine globale Funktion in einem Ort definiert:jQuery `this` Umfang Ausgabe

function addToCart(){ 
    var prodText = $(this).parent().siblings(".item1").text(); 
    $("#"+prodId+"shopC").children(".item1").text(prodText); 
    alert(prodText); 
} 

Dann will ich es in einem HTML-Elemente nennen mit einer Inline-onClick Veranstaltung: onClick='addToCart() '

Es funktioniert nicht, aber es funktioniert, wenn ich den Funktionscode direkt innerhalb des onClick Ereignisses setze, also muss ein this Bereichsproblem sein. Es gibt viele Fragen/Erklärungen über this Scope, aber ich muss gestehen, ich vermisse eine einfache, direkte Antwort für diesen speziellen Fall (Ich habe versucht, "use strict" mit Erfolg entweder zu verwenden). Wie funktioniert das?

+0

Nennen Sie es so 'onClick = 'addToCart (this)'' und ersetzen Sie dies in Ihrer Methode durch den hier übergebenen Parameter – gurvinder372

Antwort

4

Gemäß der aktuellen Implementierung bezieht sich this nicht auf das Element, das die Funktion aufgerufen hat. Es bezieht sich auf window Objekt.

Sie benötigen das aktuelle Element Kontext this d.h. der Funktion als

onClick='addToCart(this)' 

und modifizieren, um die Funktion zu übergeben Element als Parameter zu akzeptieren.

function addToCart (elem){ 
    var prodText = $(elem).parent().siblings(".item1").text(); 
    $("#"+prodId+"shopC").children(".item1").text(prodText); 
    alert(prodText); 
} 
1

Grundsätzlich this innerhalb einer Ebene Funktion zu window zeigen. Sie müssen den this Kontext an den Inline-Handler onClick='addToCart(this)' übergeben. Empfangen Sie es und verwenden Sie es innerhalb des Ereignishandlers wie unten.

function addToCart (_this){ 
    var prodText = $(_this).parent().siblings(".item1").text(); 
0

Sie haben dieses Schlüsselwort passieren, wo Sie die addToCart Funktion Inline-Aufruf dann können Sie

onClick='addToCart(this)' 
0

this Objekt in Ihrer Funktion dieses Elements erfassen verweist nicht auf das Objekt, in dem Sie hinzugefügt, um die onClick Funktion zu. Es zeigt eher auf das Objekt window.

Sie müssen this als Parameter an Ihre Funktion übergeben.

function addToCart (trigger) { // Code goes here } 

und rufen addToCart(this) in Ihrem onClick.

Erfahren Sie mehr über this in Javascript hier.