在IE9中,HTML选项标签值属性返回" undefined "
HTML Option tag value property returns “undefined” with web-browser control in IE9
下面是一个使用WebBrowser控件进行导航的网页上的javascript函数。我有两个列表框和一个"添加"按钮之间。我在左侧列表框中选择多个项目,然后点击添加按钮,这样这些项目就会被复制到右侧列表框中。Add按钮调用的javascript函数如下所示:
问题:当我在WebBrowser控件上浏览页面时(版本无关紧要),我看到以下问题:
selList.options[j].value returns “undefined” .
selList.options[j].text does return the correct text for the OPTION element.
所选OPTION的期望值应该类似于"11187|1"。(它只是寻找选项html元素的值属性)。注意selList.options[j]。Selected还返回有效的"true"或"false"值。
这在ie6, IE7或IE8中不会发生。这在IE 9浏览器中不会发生。这只发生在使用WebBrowser控件从Excel (VBA)与IE9的机器上的表单。奇怪的是,当在。net应用程序中使用web浏览器控件时,这不会发生。IE9。它似乎仅限于在Excel中使用控件。
//////////////////////////////////////////////////
function getSelectionString(selList)
{
var aSelections = new Array();
var listLength = selList.options.length;
//alert("list Length "+listLength);
for(var j=0; j < listLength; j++)
{
if(selList.options[j].selected)
{
var sItem = selList.options[j].value; //sItem returns “undefined” !!!
aSelections.push(sItem);
}
}
return aSelections.join(",");
}
///////////////////////////////////////////////////////////////
——SAMPLE of select tag for source select list -
<select name=”srcList”>
<option value='44725|1'>1st Auto & Cas Ins Co (44725-P)</option>
<option value='10750|1'>1st Choice Auto Ins Co (10750-P)</option>
<option value='35700|1'>2 10 Home Buyers Warranty of VA (35700-P)</option>
<option value='11187|1'>2-10 Hbw of NV Inc (11187-P)</option>
</select>
我在VB中的webbrowsercontrol中遇到了同样的问题。Net Word插件。在使用IE9的Citrix服务器(W2K8 R2)上,下拉列表的值在(Ajax)回发时是未定义的。但是,同样的控件在同一台服务器上的Outlook插件和正常的IE9浏览器窗口中都可以正常工作。在浪费时间检查代码,搜索网页后,我发现有一个注册表项可以解决我们的问题:
[HKEY_LOCAL_MACHINE'SOFTWARE'Wow6432Node'Microsoft'Internet Explorer'MAIN'FeatureControl'FEATURE_USE_WINDOWEDSELECTCONTROL]
此键具有此值"winword.exe"=dword:00000001,并且该键中没有Outlook.exe。因此,在将值设置为"winword.exe"=dword:00000000之后,一切正常。
参见:http://support.microsoft.com/kb/927377
这是经过极大简化的html文件。请另存为test.html
<html>
<script>
function submitClick(form) {
var aSelections = new Array();
var selectionList = form.selectionList;
var listLength = selectionList.options.length;
alert("list Length "+listLength);
for(var j=0; j < listLength; j++){
//alert("got ["+j+"] "+selectionList.options[j].value);
if(selectionList.options[j].selected) {
alert("got Selected["+j+"] - value is - "+selectionList.options[j].value);
var sItem = selectionList.options[j].value;
aSelections.push(sItem);
}
}
aSelections.join(",");
alert("Selected values "+aSelections);
return false;
}
</script>
<form name="selectForm">
<table>
<tr>
<td><select name="selectionList" size="12" style="width:390" styleClass="companySelection" multiple="true">
<option value='44725|1'>1st Auto & Cas Ins Co (44725-P)</option>
<option value='10750|1'>1st Choice Auto Ins Co (10750-P)</option>
<option value='35700|1'>2 10 Home Buyers Warranty of VA (35700-P)</option>
<option value='11187|1'>2-10 Hbw of NV Inc (11187-P)</option>
</select><br>
</td><td>
<input class=insButton type="button" value="Add >"
onClick="submitClick(this.form)" />
</td><td>
</td>
<br>
</form>
</html>
设置:
在使用IE9的机器上,在Excel中(版本无关),放下ActiveX命令按钮。
删除浏览器控件
在commandbutton1的回调中,调用以下代码:
Private Sub CommandButton1_Click()
WebBrowser1.Navigate ("C:'temp'test.html")
End Sub
复制:
ie9 (works):在ie9.0中启动test.html。使用鼠标选择左侧列表框中的所有4个项目,然后单击"添加"。
您将获得一个计数,并将显示所有值。
Via App(不工作):启动Excel。单击命令按钮。这将在web浏览器控件中加载页面。使用鼠标选择左侧框中的所有4个项目。您将得到一个计数,但这一次,值将显示为" undefined "
答案吗?有人知道为什么会这样吗?
我以前也遇到过同样的问题。不幸的是,我在互联网上没有找到关于这个问题的任何东西。无论如何,我做了一个变通。它是神奇的,因为value本身是未定义的,但可以从属性集合中获得。如果适合您,请使用以下解决方案。
function getOptionValue(opt) {
var val;
if (opt) {
if (typeof (opt.value) == "undefined") {
if (opt.attributes && opt.attributes["value"]) {
val = opt.attributes["value"].value;
}
}
else
val = opt.value;
}
return val;
}
我认为这是由于IE浏览器和从Excel打开的IE浏览器实例的行为不同造成的。不同的接口用于相同的HTML选项元素(DispHTMLWndOptionElement
和DispHTMLOptionElement
)。
- 窗口对象属性返回一个dom节点
- 根据其他属性返回的值设置属性
- 访问javascript对象的属性返回undefined,原因是什么
- 将javascript(jQuery)对象属性返回到默认状态
- 如何设置我们从 JavaScript 中其他元素的属性返回的值 onclick 函数
- JQuery 最接近属性返回未定义
- 为什么我的模型中的默认属性返回未定义
- 筛选器深层嵌套属性返回空数组
- 为什么属性返回未定义而不是对象
- JavaScript 和 jQuery,创建和使用一个对象.属性返回未定义
- Ember异步计算属性返回未定义的
- 连接对象的值's属性返回NaN(Javascript)
- parseInt正在为CSS属性返回NaN
- (ember.js)Get-Binding属性返回undefined
- ArrayController属性返回字符串字面量
- jQuery - get属性返回undefined
- 属性返回原始值,而不是通过方法调用更新的值
- 在等待$onInit回调完成时,我应该为Angular绑定的属性返回什么?
- 如何从数据值属性返回负值?
- 遍历对象属性返回所有对象属性