【问题标题】:Why Select Element is of type DispHTMLWndSelectElement but not HTMLSelectElement in IE9?为什么选择元素的类型是 DispHTMLWndSelectElement 而不是 IE9 中的 HTMLSelectElement?
【发布时间】:2014-10-05 19:59:09
【问题描述】:

我正在尝试制作一个为 IE8 开发的简单 Java 脚本页面,该页面与 IE9 及更高版本兼容。当我尝试使用原型的 getValue() 方法时,选择标签给出“TypeError:对象不支持属性或方法'getValue'”。此页面在所有版本的 IE 中都能正常工作在 IE9 中,少数没有管理员权限的县用户除外。

有人可以帮我解决这个问题吗?

<!DOCTYPE html>
<html>
   <head>
     <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript" SRC="prototype.js"></SCRIPT>
   </head>
   <body style="width:500px">
   <form id="example" action="#" onsubmit="return false">
     <div id="container">
       <select size="7" style="width:auto;" name="commonRTSelect" id="commonRTSelect" multiple>
       <option value="volvo" selected>Volvo</option>
       <option value="saab" selected>Saab</option>
       <option value="mercedes" selected>Mercedes</option>
       <option value="audi">Audi</option>
       </select>
      <input type="text" style="width:auto;"  name="fname" id="fname" value="madhu">  
      <br>
   </div>
  </form>
  <input type="button" value="Toggle" onclick="showResult();"/>

<script>

function showResult() {
    var elems = $('container').select('input','select','textarea');
    elems.each( function(e){
        if(e instanceof HTMLElement) {
            alert("Yes.."+e.name+"  is an instance of HTMLElement");
        }
        else {
            alert("No "+e.name+" is not an instance of HTMLElement. it is " + e);
        }
    });

    try{
        alert("Dropdown Value>> " + $('commonRTSelect').getValue());
    }
    catch(e) {
        alert(e);
    }
}

</script>
</body>
</html>

当我调试这个问题时,我发现选择标签的类型是 DispHTMLWndSelectElement。无法在此处附上屏幕截图..

【问题讨论】:

  • 只需使用“commonRTSelect.value”,它适用于任何地方。或者,如果你想要 >1,commonRTSelect.querySelectorAll(":checked")
  • 感谢您的回复。但为什么它只在县用户登录时失败?该页面在同一台机器上同一 IE9 浏览器的管理员登录中运行良好。什么实际上可能导致此类错误?为什么 MSHTML 互操作会改变它的工作方式,仅在非管理员登录时将此类对象返回给我?
  • 有人可以帮忙吗?

标签: javascript html internet-explorer-9 prototypejs


【解决方案1】:

而不是,

$('commonRTSelect').getValue()

...请尝试,

$F('commonRTSelect')

在内部,它们应该调用相同的函数,实际上是checking the element's tag name。这里的问题是DispHTMLWndSelectElement没有从HTMLSelectElement继承getValue()函数所以解决方法是不调用实例方法。

至于为什么 IE 决定再次破坏兼容性,再次,这是任何人的猜测。也许它检测到一个不在文档字符集中的字符并退回到另一种呈现模式。如果不比较页面来源和 ouigii 板,就很难判断。

【讨论】:

  • 感谢您的回复.. 但不幸的是,它不起作用.. 我仍然看到同样的错误。就您而言,如果文档中的字符不在 UTF-8 字符集中,如果我以管理员身份登录,它如何在同一台机器上工作?
  • 我实际上并不认为字符集与它有任何关系,这是一个(错误的)猜测的例子。我找不到DispHTMLWndSelectElement 的解释,最热门的是这个页面,我认为您的计算机正在发生更重要的事情,导致它像那样崩溃。
猜你喜欢
  • 2013-09-05
  • 2014-08-05
  • 2013-03-05
  • 2013-01-31
  • 2012-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多