0

ラジオボタンを1つだけ選択してIE 7で正常に動作することについてデータグリッドから呼び出されるjavascript関数がありますが、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("*")。古いバージョンの IEgetElementsByTagNameと新しいバージョンのquerySelectorAll.

getElementsByTagNameしたがって、古いバージョンの IE (IE<9) およびIE 9 に使用できますquerySelectorAll

于 2013-04-24T08:15:35.170 に答える