【发布时间】:2016-11-05 05:48:10
【问题描述】:
尝试使用 Excel VBA 编辑网站。编辑似乎有效,但是当我使用保存按钮时,什么都没有保存。为什么屏幕上可见的更新数据没有被保存?
此代码在 Internet Explorer 中打开一个网页,导航到我想要的位置,填写数据,所有这些都显示在屏幕上,使用各种方法,例如:
For Each objElement In objElementColl
ExtractedName = objElement.outerHTML
If InStr(ExtractedName, "NewPermit") > 0 Then
objElement.Checked = True
和
Set DropDown = objHTML.getElementById("ProjectFile-AccreditedCertifierId")
DropDown.selectedIndex = 1
或
objHTML.getElementsByName(ElementName)(0).Value = ValueCheck
所有工作和更改都会显示在屏幕上。我点击保存使用:
Set objElementColl = objHTML.getElementsByClassName("btn")
For Each objElement In objElementColl
ExtractedName = objElement.outerHTML
If InStr(ExtractedName, "click: save, enable:") > 0 Then
objElement.Click
ExtractedName = 1
Exit For
End If
Next
哪个运行。问题是它没有保存上面三部分的更改。
我尝试过的
-
暂停我的代码并手动点击保存(同样的问题)
-
暂停我的代码,手动更改复选框并运行代码以保存(确实保存手动更改,但不保存编码的更改
-
暂停代码手动换框手动保存(只保存手动换框)
从上面看,我的保存点击似乎有效,但尽管使用代码明显更改并填写了框,但可见和背景之间存在差距。
一些 HTML 源代码。是 Chrome 在检查我正在更改的元素时向我显示的内容:
<fieldset>
<legend>Proposal</legend>
<div class="col-xs-12 col-sm-8 col-md-6">
<div class="row">
<div class="col-xs-2 form-group">
<label for="ProjectFile_ProposalLot">Lot</label><input class="form-control" data-bind="textInput: ProjectFile().ProposalLot" maxlength="100" name="ProjectFile-ProposalLot" type="text" />
</div>
<div class="col-xs-2 form-group" data-bind="visible: ProjectFile().StateId() != 7 && ProjectFile().StateId() != 5">
<label data-bind="text: ProjectFile().ProposalDpLabel()"></label>
<input class="form-control" data-bind="textInput: ProjectFile().ProposalDp" maxlength="100" name="ProjectFile-ProposalDp" type="text" />
</div>
我搜索了该页面的源代码。我相信这可能很重要,但我不是 HTML 编码器。我把它缩短了一点
var ProjectFileEditViewModel=(function(){__extends(ProjectFileEditViewModel,ViewModel.Model);function ProjectFileEditViewModel(){ProjectFileEditViewModel.__super__.constructor.apply(this,arguments);};ProjectFileEditViewModel.prototype.fields=function(){return {"Id":new ViewModel.NumberField(0),"StateId":new ViewModel.NumberField(0),"DefaultOfficeAddressId":new ViewModel.ObservableField(),"Name":new ViewModel.ObservableField(),"ExistingApprovalDate":new ViewModel.DateField("DD/MM/YYYY"),"ProjectClosed":new ViewModel.ObservableField(),"ProposalAddress":new ViewModel.ObservableChildField(exports.AddressViewModel,this),"Zoning":new ViewModel.ObservableField(),"ProposalLot":new return ProjectFileEditViewModel;})();if(exports.ProjectFileEditViewModel==null)exports.ProjectFileEditViewModel=ProjectFileEditViewModel;
还有这个:
Buildaform.model=new Buildaform.ProjectPageViewModel({ ... ,"ProposalLot":null .... }
我认为最后一个与它有关。不知道能不能改。
我不能公开发布网站地址或源代码。
【问题讨论】:
-
足够公平......会做
-
我过去也遇到过类似的问题。使用浏览器开发人员工具检查 html DOM,我发现每当我手动更改表单上的值(比如说一个带有 id:input1 的值)时,它都会“镜像”到另一个元素在不可见的 DOM 上(比如说一个带有 id:input1_value 的 DOM)。然而,每当我以编程方式更改 input1 的值时,input1_value (这是表单使用的值)都不会更改。解决方案是在提交表单之前以编程方式更改这两个元素的值。
-
导航到网页,右键单击输入字段之一并选择检查元素,这将在开发人员工具上显示 DOM。现在回到页面并在输入中输入一个值,您会注意到相关 DOM 元素的变化。然后,在 DOM 视图中,搜索 (Ctrl+f /Cmd+f) 以查找您在输入中输入的值,并检查是否在 DOM 上的多个标签上找到它。
-
我不知道如何更改它,但也许对数据绑定进行一些研究会有所帮助。另一个问题讨论它:How to Implement DOM Data Binding in JavaScript.
-
我假设您获得了带有
CreateObject("InternetExplorer.Application")的IE 引用?您对页面引用的所有 javascript 文件实际加载的信心如何?
标签: javascript excel vba knockout.js dom-events