2016-08-09 10 views
-1

Ich habe Code, welche Elemente mit Klasse .colorsSenden Parameter ohne Funktion init

var colors = document.querySelectorAll('.colors'); 

Und Schleife, die Veranstaltung für alle, die Elemente zuweist sammelt.

for (var i=0;i<colors.length;i++) { 
    var color = colors[i]; 
    color.addEventListener('click', remember(color.getAttribute('id')), false); 
} 

Wie kann ich Parameter senden (in diesem Proben- 'color.getAttribute (' id ')') zu funktionieren (in diesem Proben- 'erinnern'), ohne ihre Initiation?

function remember(color_value) { 
    localStorage.setItem('color', color_value); } 
+0

Ich glaube nicht, es ist möglich! – Pugazh

+1

Ich glaube nicht, dass deine Frage genug erklärt wird. Versuchen Sie, die ID von "color" zu finden, ohne ".getAttribute" zu verwenden? – NachoDawg

+0

Wenn Sie die ID des DOM-Elements anklicken möchten. Sie können es trotzdem im clickListener bekommen. Sie können das 'target' Element des Listeners bekommen und dann 'getAttribute'. –

Antwort

2

Funktionale Parameter können nicht direkt an Ereignis-Listener übergeben werden. Stattdessen instanziieren Sie eine einfache Funktion und übergeben Sie den Parameter wie folgt.

function remember(id) { 
 
    console.log(id); 
 
} 
 

 
var colors = document.querySelectorAll('.colors'); 
 

 
for (var i = 0; i < colors.length; i++) { 
 
    var color = colors[i]; 
 
    color.addEventListener('click', function() { 
 
    remember(this.getAttribute('id')) 
 
    }, false); 
 
}
.colors { 
 
    padding: 5px 10px; 
 
    background-color: lightgreen; 
 
}
<div id="div1" class="colors">Click Me - I'm Div 1</div> 
 
<br> 
 
<div id="div2id" class="colors">Click Me - I'm Div 2</div>

+0

Ich glaube, 'color' sollte' this' in der Callback-Funktion sein sonst wird es immer auf das letzte Element zugreifen. – moopet

+0

@moopet: Danke, ich habe die Antwort aktualisiert! – Pugazh

Verwandte Themen