0

网页浏览器控件以下是对我一个导航的使用WebBrowser控件网页中的JavaScript函数。我有两个列表框和一个“添加”按钮之间。我选择左侧列表框中的多个项目并点击添加按钮,以便这些项目将被复制到右侧列表框中。下面显示了由Add按钮调用的JavaScript函数。HTML选项标签值属性返回“未定义”在IE9

问题:当我浏览WebBrowser控件上的页面(版本无所谓),我看到下面的问题:

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”值。

这并不在IE 6,IE7或IE8发生。 这不会发生在IE 9浏览器中。 只有在使用IE9的机器上的Excel(VBA)内的表单上使用WebBrowser控件时,才会发生这种情况。 奇怪的是,这并没有使用在.NET应用程序& 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选择列表 -

<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> 
+1

你是如何** **调用的 “getSelectionString()” 函数? – Pointy

+0

它被另一个JavaScript函数调用,在点击页面上的“添加”按钮时被调用。这个函数遍历所有的OPTION,看看哪些被选中,创建OPTION的value属性的一个','分离的字符串(比如“44725 | 1,11187 | 1”)并返回它。所有这些在IE浏览器上都能正常工作。但是,当我通过Excel VBA使用WebBrowser Control时,此函数将所选OPTION的value属性视为“undefined”,因此它只返回“”,“”。 – kumar

回答

0

这里是千差万别简化的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命令按钮。

放一个WebBrowser控件。

在回调为CommandButton,调用以下代码:

Private Sub CommandButton1_Click() 
    WebBrowser1.Navigate ("C:\temp\test.html") 
End Sub 

重现:

IE 9(作品):发射的test.html在IE 9.0。使用鼠标选择左侧列表框中的所有4个项目,然后单击添加。

您将得到一个计数,并且所有的值都会显示出来。

通过应用程序(不起作用):启动Excel。点击命令按钮。这会在网页浏览器控件中加载页面。使用鼠标选择左侧框中的所有4个项目。你会得到一个计数,但这次,该值会说“未定义”

任何答案?有人看到为什么会发生这种情况

0

我前段时间遇到同样的问题。不幸的是,我在互联网上对这个问题一无所知我遇到过任何情况,我做了一个解决方法。这是神奇的,因为值本身是未定义的,但可以从属性集合中获得。如果它适合您,请使用以下解决方案。

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浏览器和从IE打开的IE浏览器实例的不同行为引起的。不同的接口用于相同的HTML选项元素(DispHTMLWndOptionElementDispHTMLOptionElement)。

1

我在VB.Net Word加载项中遇到了与webbrowsercontrol相同的问题。在使用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