使用javascript设置表单元素的值 - 仍然提示必填字段

时间:2017-02-16 15:22:26

标签: javascript html iframe knockout.js

我通过Javascript在iframe中的表单上设置值。 请注意,我无法访问iframe中显示的页面。我的Javascript页面位于同一台服务器上,因此可以访问显示的表单。

//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时,我仍然会获得“必需的”值。信息。我怀疑这是因为将Knockout Javascript库与视图模型绑定,需要一个按键。

即使我手动进入表单并在每个值后按Enter / Tab,我仍然会收到消息。仅当我手动将Forename和Surname更改为Save成功的其他内容时才会这样做。

以前有人做过这样的事吗?感谢

In this image you can see the values are set

1 个答案:

答案 0 :(得分:0)

我相信您遇到的问题实际上是由于使用敲除绑定涉及更深层次的问题。直接更新UI控件的值无效,因为真实基础值存储在javascript视图模型对象中。 DOM元素仅镜像该值,并且使用引擎盖下的更改事件挂钩执行更新。当您在UI上手动更改值时,将触发更改事件并更新视图模型值。

Knockout.js Docs

因此,要正确更新值,您应该尝试使用knockout库来更新基础数据:

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?