2 Stimmen

javascript - grundlegende onclick Ereignis Frage

Ich habe eine dynamische Tabelle, die aus einem Array gefüllt wird.

Bei der Erstellung der Tabelle habe ich innerhalb einer Schleife folgendes:

var tdRecord = trRecord.insertCell(trRow.cells.length);
var tdRecordId = dataArray[j][0];
tdRecord.onclick = function() { alert(tdRecordId); }

Das Problem ist, dass alert nur die zuletzt gesetzte tdRecordId im Array meldet. Wenn ich auf eine der anderen td-Zeilen klicke, melden sie alle die gleiche Zahl.

Weiß jemand, wie ich das beheben kann?

1voto

Šime Vidas Punkte 172810

Das sollte funktionieren:

(function( id ) {

    tdRecord.onclick = function() {
        alert( id );
    };

}( tdRecordID ));

Sie scheinen Ihren Code innerhalb einer Schleife auszuführen. In diesem Fall verweisen alle Click-Handler auf denselben tdRecordId Wert. Wenn Sie den Wert der aktuellen Iteration erfassen wollen, müssen Sie einen Funktionswrapper verwenden, der dies für Sie erledigt.

0voto

Alec Gorge Punkte 16572
tdRecord.onclick = function () { alert('123'); };

0voto

pimvdb Punkte 146174

Sie könnten die Datenfunktion von jQuery verwenden: http://jsfiddle.net/zRXS6/ .

$(function(){
    var number = 1;
    var div1 = $('<div>a</div>');
    div1.data('number', number);
    div1.click(function() {window.alert($(this).data('number'))});
    number = 2;
    var div2 = $('<div>b</div>');
    div2.data('number', number);
    div2.click(function() {window.alert($(this).data('number'))});
    $('body').append(div1).append(div2);
});

-1voto

McKayla Punkte 6677
tdRecord.onclick = "alert(" + tdRecordId + ")";

Setzen Sie ihn als Literal, nicht als dynamisch :)

In dem, was Sie tun, wird es sich immer auf die Variable beziehen, und nicht auf den aktuellen Wert.

Wenn sich also die Variable ändert, ändert sich auch das, was die Funktion meldet.

Dabei wird nicht die Variable selbst, sondern der Wert eingefügt, so dass er sich nicht ändert, sondern gleich bleibt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X