2016-04-18 6 views
2

First Stack Overflow Frage hier. Ich habe über ein Dutzend Fragen zu ähnlichen Themen gelesen, aber keine von ihnen passt zu dem Problem, mit dem ich zu kämpfen habe. Meine Web App ist ein "Lehrer-Notenbuch", in dem die Noten für verschiedene Aufgaben gespeichert werden. Die Ansicht zeigt eine große Tabelle mit den Schülern und deren Bewertungen. Wenn der Benutzer auf eine Schaltfläche "Klassenzeitraum" klickt, sollte sich die Tabelle ändern, um die Schüler und die Punkte für den neuen Klassenzeitraum anzuzeigen. Verwendung des folgenden Codes werden die Eingabefelder nicht aktualisiert werden:Ändern Sie den Wert vieler Eingabefelder

$scope.changeClassPeriod = function(classPerIndex) { 
    $scope.currClassPer = classPerIndex; 
    var thisClassPeriod = $scope.classPeriods[$scope.currClassPer]; 
    for (var i = 0; i < thisClassPeriod.assignments.length; i++) { 
     $("#head"+i).text(thisClassPeriod.assignments[i].assignmentName); 
    }; 
    for (var i = 0; i < thisClassPeriod.students.length; i++) { 
     for (var j = 0; j < thisClassPeriod.assignments.length; j++) { 
      $($('#scoresheet')[0].rows[i+1].cells[j+2]).val(thisClassPeriod.students[i].scores[j]); 
     }; 
    }; 
}; 

Das Merkwürdige ist, wenn ich den „Text“ Befehl verwenden, anstelle der „Val“ -Befehl, die Ansicht aktualisiert, so dass alle tds die Noten zeigen das erwarte ich. Der Nachteil ist, dass bei diesem Ansatz alle Eingabefelder in Textfelder geändert werden, sodass der Benutzer sie nicht mehr bearbeiten kann.

$($('#scoresheet')[0].rows[i+1].cells[j+2]).text(thisClassPeriod.students[i].scores[j]); 

In einer ähnlichen Frage gestellt an anderer Stelle auf Stack-Überlauf, erwähnt einige andere Helfer die eindeutige ID für jedes Eingabefeld benötigt wird. Ist das ein Problem für Eingabefelder, aber nicht für Textfelder?

+0

Eindeutige IDs werden immer benötigt, für alle Elemente auf einer Seite können Sie keine doppelten IDs haben, jQuery ruft nur das erste Element mit einer gegebenen ID ab. Das zweite Code-Snippet kann nicht funktionieren, da es sich um einen Syntaxfehler handelt. – adeneo

+0

Bearbeitet, um den Syntaxfehler zu beheben. Benötigt, um die Klammern um '#scoresheet' zu schließen. Der 'Text' kann mit der folgenden Antwort von Void auch wieder in 'val' geändert werden. –

Antwort

1

Wenn .text() funktioniert und .val() nicht funktioniert, dann zielen Sie auf ein anderes Element als ein Eingabefeld. Versuchen Sie Folgendes:

$($('#scoresheet')[0].rows[i+1].cells[j+2]).find('input').val(thisClassPeriod.students[i].scores[j]); 

Wenn Ihr Rest des Codes in Ordnung ist, dann sollte dies den Job tun.

+0

Ja! Das hat die Arbeit gut gemacht. Vielen Dank. –