2015-04-29 4 views
1

У меня есть JavaScript в качестве ОМТ, который выглядит следующим образом:модальное диалоговое окно не общается с главным окном HTA

var result = null; 
window.showModalDialog("dialog.hta", window, "dialogHeight:300px; dialogWidth:300px"); 
alert(result); 

dialog.hta:

<html> 
<head> 
    <title>Dialog box</title> 
    <meta http-equiv="MSThemeCompatible" content="yes"/> 
</head> 
<body style="background:#F0F0F0"> 
    <select id="colors"> 
      <option selected>Red</option> 
      <option>Blue</option> 
      <option>Green</option> 
      <option>Yellow</option> 
    </select><br/> 
    <script type="text/javascript"> 
      function ok(){ 
       window.dialogArguments.result = colors.getElementsByTagName("option")[colors.selectedIndex].innerHTML; 
       window.close(); 
      } 
    </script> 
    <button onclick="ok()">OK</button> 
    <button onclick="window.close()">Cancel</button> 
</body> 
</html> 

Проблема заключается в том, что, когда я нажимаю OK alert(result) в главном окне HTA всегда говорит null, даже когда я нажимаю кнопку OK в модальном диалоговом окне. Как я могу сделать так, чтобы он указывал, какую опцию пользователь выбирает в списке при нажатии кнопки ОК и нулевом при нажатии кнопки отмены?

ответ

1

Это как модальный диалог работы:

В главном приложении:

// Call a dialog, and store the returned value to a variable 
var result = showModalDialog(path, argument, options); 

В диалоге закрытия:

// Set the returnValue 
var elem = document.getElementById("colors"); 
window.returnValue = elem[elem.selectedIndex].text; 
top.close(); 

После установки returnValueв диалога, вы можете прочитайте его с result после того, как диалог был закрыт.

option элементов не было innerHTML в старых IE, поэтому вместо этого вы должны использовать свойство text. Вы также можете добавить атрибут value к элементу select, а затем создать обратное значение простым способом:

window.returnValue = document.getElementById('colors').value; 
Смежные вопросы