0

我有 javascript 函数,它是从 datagrid 调用的关于只选择一个单选按钮并且在 IE 7 上工作正常但现在 IE 9 抛出错误 Microsoft JScript 运行时错误:对象不支持属性或方法“getElementsByTagName”请建议如何修复它

function SelectSingleRadioButton(gridViewId) {
   var grid = document.getElementById(gridViewId);
   var RadioButtonObj = window.event.srcElement;
   for (i = 0; i < grid.rows.length; i++) {
      var tr = grid.rows[i];
      var td = tr.childNodes[0];
      var items = tr.childNodes[0].getElementsByTagName("input") // the point where error is occuring
      for (j = 0; j < items.length; j++) {
         if (items[j].type == "radio") {
            if (RadioButtonObj.id == items[j].id) {
                items[j].checked = true;
            }
            else {
                items[j].checked = false;
            }
         }
      }
   }
}
4

1 回答 1

1

最近对 clone() 方法的优化引入了这个错误。

由于变量elemclone两者都可以是 DocumentFragments,因此在它们上调用 getElementsByTagName 是不安全的。因为根据规范 DocumentFragements 不实现此方法。较旧的 IE 版本不会遇到此问题的原因是它们也在 DocumentFragments 上实现了此方法,尽管它们不应该这样做。IE9 似乎已经修复了这个问题(成为更多规范之后)并删除了该方法,现在在点击这个分支时会中断。

一个可能的解决方法是检查是否elem/clone are nodeType === 11然后检查是否elem/clone.getElementsByTagName可用,如果是则使用它。如果没有求助elem/clone.querySelectorAll("*")。这应该没问题,因为旧 IE 版本getElementsByTagName和新版本都有querySelectorAll.

所以你可以使用getElementsByTagName旧版本的 IE(IE<9) 和querySelectorAllIE 9。

于 2013-04-24T08:15:35.170 回答