2017-12-17 2 views
0

Ich füge dynamisch Elemente mit der Klasse .footprint zum DOM hinzu und muss ihnen das Ereignis click() hinzufügen. Meine aktuellen Code sieht wie folgt aus:Übergeben Sie 'this' als Argument für den Ereignishandler mit on() jQuery-Methode

$("#pcb").on("click", ".footprint", selectFootprint); 

hat jedoch selectFootprint(sender) Methode einen Parameter, wo Ich mag würde DOM-Element (diese) zu übergeben.
Wie kann ich es tun?

+3

'var sender = this'?! Keine Notwendigkeit, es als param zu übergeben. Closuring funktioniert auch –

+0

@JonasW. Das löst mein Problem, ich habe gar nicht darüber nachgedacht. Vielen Dank! –

+0

Sprechen wir über den Kontext, in dem sich der Code befindet, oder reden wir über das Element '.footprint'? –

Antwort

1

Akut, in on() jQuery-Funktion- this Schlüsselwort ist das angeklickte Element darstellen, so dass Sie die Funktion wie gewünscht aufrufen können.

$("#dataTable tbody").on("click", "tr", function() { 
    console.log($(this).text()); 
}); 

(Aus der Entfernung).

Oder in youre Fall:

function selectFootprint(){ 
    console.log($(this).text()); 
} 
$("#pcb").on("click", ".footprint", selectFootprint); 
+0

Aber hier verwenden Sie eine anonyme Funktion. In meinem Fall habe ich eine Funktion (Event-Handler), die ich aufrufen möchte. –

+0

@VitaliiIsaenko es ist das gleiche, aber ich habe meine Antwort bearbeitet, um es leichter zu verstehen. – Elad

1

ein paar Lösungen (die Eltern Kontext passieren):

1) jquerys Datenparameter verwendet:

$("#pcb").on("click", ".footprint", this, function(e){ 
    console.log(this, e.data);//data is the parents this 
}); 

2) mit einem Verschluss

var sender = this; 
$("#pcb").on("click", ".footprint", function(){ 
    selectFootprint.call(this, sender); 
}); 

Oder wenn Sie nur wollen, die passieren .footprint:

$("#pcb").on("click", ".footprint",function(){ 
selectFootprint(this); 
}); 
+0

Ich mag die erste Option, können Sie eine Lösung mit meinem Beispiel bieten? Keine anonyme Funktion. –

+0

@vitalii macht keinen Unterschied –

+0

Ich sehe den Unterschied wie in Ihrem Beispiel übergeben Sie die anonyme Funktion und definieren Parameter 'e'. Aber wenn ich Klammern mit meiner Funktion 'selectFootprint' verwende, wird es aufgerufen. –

0

Statt selectFootprint direkt als Rückruf zu verwenden, um eine neue Funktion definieren, die immer bezieht sich auf das DOM-Element selectFootprint mit diesem als Parameter (dies innerhalb eines Eventlistener ruft die Zuhörer ist angeschlossen an)

$(".footprint").on("click", function() { 
    selectFootprint(this); 
}); 
Verwandte Themen