2017-02-16 3 views
1

Я устанавливаю значения в форме в iframe через Javascript. Обратите внимание, что у меня нет доступа к странице, отображаемой в iframe. Моя страница Javascript находится на одном сервере, поэтому она имеет доступ к отображаемой форме.Задайте значение элемента формы с помощью поля javascript - still prompts required

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

установка Javascript значение:

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

Значения, установленные успешно (прилагается IMG). Однако, когда я нажимаю SAVE, я все равно получаю сообщение «Обязательные значения». Я подозреваю, что это потому, что библиотеки Javascript Knockout, которые связывают значение с моделью просмотра, требуют нажатия клавиш.

Даже когда я вручную перехожу в форму и нажимаю Enter/Tab после каждого значения, я все равно получаю сообщение. Только когда я изменяю имя и фамилию вручную, чтобы что-то еще было успешным.

Неужели кто-то делал что-то подобное раньше? Благодаря

In this image you can see the values are set

ответ

0

Я считаю, что проблема вы испытываете на самом деле связано с более глубоким вопросом, связанным с использованием нокаутом связывания. Обновление значения элемента управления пользовательского интерфейса напрямую не влияет, поскольку базовое значение real хранится в объекте модели javascript. Элемент DOM отражает только это значение, а обновления выполняются с помощью крюка события изменения под капотом. Когда вы изменяете значение вручную в пользовательском интерфейсе, происходит событие изменения и обновляется значение модели модели.

Knockout.js Docs

Таким образом, чтобы правильно обновлять значения, которые вы должны попробовать использовать библиотеку нокаута, чтобы обновить основную информацию:

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 

Если вы не можете получить, чтобы работать, вы также можете попробовать вручную запуска событие изменения. Это намного проще, если у вас есть jQuery, но все равно можно сделать без него. См. How can I trigger an onchange event manually?

Смежные вопросы