0

私は、それぞれが同じクラスを与えられた4つの異なるメニュー選択肢で機能することになっているドロップダウンメニューを持っています。しかし、私のコードは機能していません。ChromeとIEの両方で動作するようにしたいと思います。それがクラッシュする状況は私のinitメソッドにあります。コンソールは次のように文句を言います:オブジェクト#にはメソッド'getElementsByTagName'がありません。解決策はありますか?

function hideorShowField(list) {
    var nodes = list.getElementsByTagName("li");
    for (i = 1; i < nodes.length; i++) {
        if (nodes[i].style.display == 'none') {
            nodes[i].style.display = 'block';
        }
        else {
            nodes[i].style.display = 'none';
       }
    }
}

function init() {
    var list = document.getElementsByClassName("undermeny");
    list1.getElementsByTagName("li")[0].onclick = function () {
        hideorShowField(list);
    };
}

window.onload = init;

私のhtmlコード:

<ul class="undermeny" >
<li>Opinion</li>
<li><a href="#">Ledare</a></li>
<li><a href="#">Aktuella frågor</a></li>
<li><a href="#">Per T Ohlsson</a></li>
<li><a href="#">Magda Forsberg</a></li>
</ul>

<ul class="undermeny" >
<li>Lokalt/Globalt</li>
<li><a href="#">Malmö</a></li>
<li><a href="#">Lund</a></li>
<li><a href="#">Limhamn</a></li>
<li><a href="#">Burlöv</a></li>
<li><a href="#">Eslöv</a></li>
<li><a href="#">Höör</a></li>
<li><a href="#">Kävlinge</a></li>
<li><a href="#">Lomma</a></li>
<li><a href="#">Svedala</a></li>
<li><a href="#">Staffanstorp</a></li>
<li><a href="#">Trelleborg</a></li>
<li><a href="#">Vellinge</a></li>
<li><a href="#">Sverige</a></li>
<li><a href="#">Öresund</a></li>
<li><a href="#">Världen</a></li>
<li><a href="#">Väder</a></li>
</ul>

<ul class="undermeny" >
<li>Ekonomi</li>
<li><a href="#">Nyheter</a></li>
<li><a href="#">Privata pengar</a></li>
<li><a href="#">Börs</a></li>
<li><a href="#">Fonder</a></li>
</ul>

<ul class="undermeny">
<li>Sport</li>
<li><a href="#">Fotboll</a></li>
<li><a href="#">Ishockey</a></li>
<li><a href="#">Handboll</a></li>
<li><a href="#">Fridrott</a></li>
</ul>
4

2 に答える 2

0

getElementsByClassName()nodeList同様にを返しますgetElementsByTagName()。したがって、おそらくこれが必要です。

list[0].getElementsByTagName("li")[0].onclick = function () {...}; 

または、を繰り返し処理して、クラスを持つs内のlistすべての1番目の要素にイベントハンドラーをアタッチする必要があります。これは次のようになります。liulundermeny

for (var n = 0; n < list.length; n++) {
    list[n].getElementsByTagName("li")[0].onclick = function () {...};
}
于 2013-01-25T20:20:51.930 に答える
0

list1初期化されていません(ただし、初期化されていますlist)。タイプミスを修正すると、の項目を繰り返し処理して、それぞれlistを呼び出すことができgetElementsByTagName()ます。

于 2013-01-25T20:26:52.287 に答える