2017-02-16 1 views
1

Ich setze Werte auf ein Formular in einem IFrame über Javascript. Bitte beachten Sie, dass ich keinen Zugriff auf die im iframe angezeigte Seite habe. Meine Javascript-Seite befindet sich auf dem gleichen Server und hat somit Zugriff auf das angezeigte Formular.Legen Sie den Wert eines Formularelements mithilfe von Javascript fest - Aufforderung noch erforderlich Feld

//HTML of Forename field in form control 
<input class="form-control" id="Forename" type="text" data-bind="value: dto.Forename"> 

Einstellung Javascript um den Wert:

var frameNode = document.getElementById('frm1'); 
var fieldNode = frameNode.contentDocument.getElementById('Forename'); 
fieldNode.value = FirstName; //previously defined 

Die Werte erfolgreich (eingebundene img sehen). Wenn ich jedoch auf SPEICHERN klicke, erhalte ich immer noch die Meldung "Werte erforderlich". Ich vermute, das ist, weil die Knockout Javascript-Bibliotheken, die den Wert mit dem Ansichtsmodell bindet, einen Tastendruck benötigt.

Auch wenn ich manuell in das Formular und drücken Sie die Enter/Tab nach jedem Wert, bekomme ich immer noch die Nachricht. Nur wenn ich den Vor- und Nachnamen manuell auf etwas anderes ändere, ist das Speichern erfolgreich.

Hat jemand so etwas schon einmal gemacht? Dank

In this image you can see the values are set

Antwort

0

Ich glaube, das Problem, das Sie erleben, ist eigentlich aufgrund eines tieferen Problems beteiligt in einem KO-Bindung verwendet wird. Das direkte Aktualisieren des Werts eines UI-Steuerelements hat keine Auswirkungen, da der echte zugrunde liegende Wert in einem JavaScript-View-Model-Objekt gespeichert wird. Das DOM-Element spiegelt nur diesen Wert wider und Aktualisierungen werden mithilfe eines Änderungsereignis-Hooks unter der Haube ausgeführt. Wenn Sie den Wert auf der Benutzeroberfläche manuell ändern, wird das Änderungsereignis ausgelöst und der Ansichtsmodellwert wird aktualisiert.

Knockout.js Docs

So richtig die Werte aktualisieren Sie die zugrunde liegenden Daten zu aktualisieren, sollten versuchen, die Ko-Bibliothek:

var frameNode = document.getElementById('frm1'); 
var fieldNode = frameNode.contentDocument.getElementById('Forename'); 
var viewModel = ko.dataFor(fieldNode); 
viewModel.dto.Forename(FirstName); //value setting works like a function 

Wenn Sie nicht, dass Sie auch manuell versuchen können, arbeiten kann auslösenden das Änderungsereignis Das ist viel einfacher, wenn Sie jQuery haben, aber immer noch ohne. Siehe How can I trigger an onchange event manually?

Verwandte Themen