1

TreeView コントロールを含むページがあり、親ノードがチェックされ、子ノードもチェックされます。それはjavascriptを使用して行われました。しかし、IE9 でページを開いて親ノードをチェックしようとすると、次のエラーが表示されます。

Microsoft JScript ランタイム エラー: オブジェクトはプロパティまたはメソッド 'getElementsByTagName' をサポートしていません

function AreAllSiblingsChecked(chkBox)
{
 var parentDiv = GetParentByTagName("div", chkBox);
 var childCount = parentDiv.childNodes.length;
 for(var i=0;i<childCount;i++)
 {
             var prevChkBox = parentDiv.childNodes[i].getElementsByTagName("input")[0];
             //if any of sibling nodes are not checked, return false
             if(prevChkBox.checked)
             {
                return true;
             }
 }
 return false;
}

//utility function to get the container of an element by tagname
function GetParentByTagName(parentTagName, childElementObj)
{
 var parent = childElementObj.parentNode;
 while(parent.tagName.toLowerCase() != parentTagName.toLowerCase())
     {
         parent = parent.parentNode;
     }
 return parent;
}

誰かがこれを解決するのを手伝ってくれるなら感謝します! 前もって感謝します...

4

1 に答える 1

0

IE9 では、childNodes[] はテキスト ノード (コメントまたは空白) と子タグを返します。テキスト ノードは getElementsByTagName() をサポートしていません。ここに、基礎となる DOM モデルの優れた要約があります

最も簡単な修正は、メソッドを使用する前にメソッドの存在を確認することです。

function AreAllSiblingsChecked(chkBox)
{
     var parentDiv = GetParentByTagName("div", chkBox);
     var childCount = parentDiv.childNodes.length;
     for(var i=0;i<childCount;i++)
     {
         if (parentDiv.childNodes[i].getElementsByTagName) {
             var prevChkBox = parentDiv.childNodes[i].getElementsByTagName("input")[0];
             //if any of sibling nodes are not checked, return false
             if(prevChkBox.checked)
             {
                return true;
             }
         }
     }
     return false;
}
于 2013-06-24T18:05:52.740 に答える