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