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

使用javascript设置表单元素的值-仍然提示必填字段,javascript,html,iframe,knockout.js,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"> 成功设置值(请参阅随附的img)。但是,当我点击S

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

//HTML of Forename field in form control
<input class="form-control" id="Forename" type="text" data-bind="value: dto.Forename">
成功设置值(请参阅随附的img)。但是,当我点击SAVE时,仍然会收到一条“values Required”消息。我怀疑这是因为将值与视图模型绑定的Javascript库需要按键

即使我手动进入表单并在每个值后按Enter/Tab,我仍然会收到消息。只有当我手动将名字和姓氏更改为其他名称时,保存才会成功

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


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

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

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,这要容易得多,但仍然可以不用jQuery完成。请参见

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

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

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,这要容易得多,但仍然可以不用jQuery完成。看