Javascript HTML选项标记值属性在IE9中使用web浏览器控件返回“未定义”
下面是我使用WebBrowser控件导航的网页上的javascript函数。我有两个列表框,中间有一个“添加”按钮。我在左侧列表框中选择多个项目,然后点击Add按钮,这样这些项目就会被复制到右侧列表框中。Add按钮调用的javascript函数如下所示 问题:当我在WebBrowser控件上导航页面时,版本无关紧要,我看到以下问题:Javascript HTML选项标记值属性在IE9中使用web浏览器控件返回“未定义”,javascript,excel,winforms,webbrowser-control,internet-explorer-9,Javascript,Excel,Winforms,Webbrowser Control,Internet Explorer 9,下面是我使用WebBrowser控件导航的网页上的javascript函数。我有两个列表框,中间有一个“添加”按钮。我在左侧列表框中选择多个项目,然后点击Add按钮,这样这些项目就会被复制到右侧列表框中。Add按钮调用的javascript函数如下所示 问题:当我在WebBrowser控件上导航页面时,版本无关紧要,我看到以下问题: selList.options[j].value returns “undefined” . selList.options[j].text does retu
selList.options[j].value returns “undefined” .
selList.options[j].text does return the correct text for the OPTION element.
所选选项的预期值应该类似于11187 | 1。它只是查找OPTION html元素的value属性。请注意,selList.options[j].selected还返回有效的“true”或“false”值
这在IE6、IE7或IE8中不会发生。
这在IE 9浏览器中不会发生。
只有在使用IE9的计算机上,在Excel VBA中对表单使用WebBrowser控件时,才会发生这种情况。
奇怪的是,在.NET应用程序&IE9中使用webbrowser控件时,这种情况并没有发生。
它似乎仅限于使用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(",");
}
///////////////////////////////////////////////////////////////
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(",");
}
-源选择列表的选择标记示例-
<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>
这是一个大大简化的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工作原理:在IE9.0中启动test.html。使用鼠标选择左侧列表框中的所有4项,然后单击“添加”
您将获得一个计数,并显示所有值
Via应用程序不工作:启动Excel。单击命令按钮。这将在webbrowser控件中加载页面。使用鼠标选择左侧框中的所有4项。您将获得一个计数,但这次,该值将显示“undefined”
有答案吗?有人知道为什么会这样吗?我不久前也遇到过同样的问题。不幸的是,我在互联网上找不到任何关于这个问题的信息。无论如何,我做了一个变通办法。它很神奇,因为值本身没有定义,但可以从属性集合中获得。如果对您有效,请使用以下解决方案
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 web浏览器和从Excel打开的IE web浏览器实例之间的不同行为造成的。不同的接口用于相同的HTML选项元素DispHTMLWndOptionElement和DispHTMLOptionElement。我在VB.Net Word加载项中遇到了与webbrowsercontrol相同的问题。在带有IE9的Citrix服务器W2K8 R2上,Ajax回发上未定义DropDownList的值。但是,同一个控件在同一服务器上的Outlook加载项中以及在正常的IE9浏览器窗口中运行良好。在浪费时间检查代码、搜索web之后,我发现有一个注册表项修复了我们的问题: [HKEY\u LOCAL\u MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE\u USE\u WINDOWEDSELECTCONTROL] 此键的值为winword.exe=dword:00000001,而Outlook.exe在该键中不可用。因此,将该值设置为winword.exe=dword:00000000后,一切正常 另见:
如何调用getSelectionString函数?它是由另一个javascript函数调用的,该函数在单击页面上的“添加”按钮时被调用。此函数遍历所有选项,查看选择了哪些选项,创建一个“,”分隔的选项值属性字符串,如44725 | 111187 | 1,并返回它。所有这些都可以在IE浏览器上正常工作。但当我通过Excel VBA使用WebBrowser控件时,此函数会将所选选项的值属性视为未定义,因此只返回,。