Свойство значения тега HTML Option возвращает «undefined» с контролем веб-браузера в IE9 - PullRequest
0 голосов
/ 14 сентября 2011

Ниже приведена функция JavaScript на веб-странице, по которой я перемещаюсь с помощью элемента управления WebBrowser. У меня есть два списка и кнопка «Добавить» между ними. Я выбираю несколько элементов в левом списке и нажимаю кнопку «Добавить», чтобы эти элементы были скопированы в правый список. Функция 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-элемента OPTION). Обратите внимание, что selList.options [j] .selected также возвращает действительное значение «истина» или «ложь».

Этого не происходит в IE 6, IE7 или IE8. Это не происходит в браузере IE 9. Это происходит только при использовании элемента управления WebBrowser на форме из Excel (VBA) на компьютере с IE9. Как ни странно, это НЕ происходит при использовании элемента управления 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(",");
}

/////////////////////////////////////////////// ////////////////

- ОБРАЗЕЦ тега выбора для списка выбора источника -

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

Ответы [ 3 ]

1 голос
/ 30 августа 2012

У меня была такая же проблема с контролем веб-браузера в надстройке VB.Net Word.На сервере Citrix (W2K8 R2) с IE9 значение раскрывающихся списков было неопределенным для (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

0 голосов
/ 26 сентября 2011

Я встречался с той же проблемой некоторое время назад.К сожалению, я ничего не нашел по этому вопросу в Интернете.Я в любом случае сделал обходной путь.Это волшебство, потому что само значение не определено, но доступно из коллекции атрибутов.Пожалуйста, используйте следующее решение, если оно работает для вас.

    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, который был открыт из Excel.Различные интерфейсы используются для одного и того же элемента опции HTML (DispHTMLWndOptionElement и DispHTMLOptionElement).

0 голосов
/ 15 сентября 2011

Вот очень упрощенный 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.

Удалите веб-браузер.

В обратном вызове для команды кнопка1 вызовите следующий код:

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

Воспроизвести:

IE 9 (работает): Запустите test.html в IE 9.0. С помощью мыши выберите все 4 элемента в левом списке и нажмите «Добавить».

Вы получите счетчик, и все значения будут отображены.

Через приложение (не работает): запустить Excel. Нажмите на командную кнопку. Это загрузит страницу в элемент управления веб-браузера. Используйте мышь, чтобы выбрать все 4 элемента в левой части окна. Вы получите счет, но на этот раз значение скажет «undefined»

Есть ответы? Кто-нибудь видел, почему это происходит?

...