0

この JavaScript スライド メニューは機能しません。デバッガーが表示する唯一のエラーは、最初の IF ステートメントがブロック コマンドであり、中括弧が必要であるということですが、これは理解できません。

誰でも明らかなエラーが表示されますか? 「this」キーワードを正しく使用しているかどうかわかりません (関数 showSlide 内の変数 slideList と同様に...助けてください & 私の書式設定 (空白) に関するフィードバックも大歓迎です!

window.onload = makeMenus;

var currentSlide = null;
var timeID = null;
var leftPos = 0;

function makeMenus() {
    var slideMenus = new Array();
    var allElems = document.getElementsByTagName("*");
    for (var i = 0; i < allElems.length; i++) {
        if (allElems[i].className == "slideMenus") menus.push(allElems[i]);
    }
    for (var i = 0; i < slideMenus.length; i++) {
        slideMenus[i].onclick = showSlide;
        slideMenus[i].ul.style.left = "0px"; //for each object in slideMenus Array, ref 1st ul       element within that object and set the value of the ul elements left style property to 0px
    }
    document.getElementById("head").onclick = closeSlide;
    document.getElementById("main").onclick = closeSlide;
}

function showSlide() {
    var slideList = this.id + ".ul[0]"; //stores object ref to the 1st ul element nested within the     current object. 

    if (currentSlide !== null) {
        closeSlide();
    } else {
        closeSlide();
        currentSlide = slideList;
        currentSlide.style.display = "block";
        timeID = setInterval("moveSlide()", 1);
    }
}

function closeSlide() {
    if (currentSlide !== null) {
        clearInterval(timeID);
        currentSlide.style.left = "0px";
        currentSlide.style.display = "none";
        currentSlide = null;
    }
}

function moveSlide() {

    if ((leftPos + 5) <= 220) {
        currentSlide.style.left = leftPos + "px"
    } else {
        clearInterval(timeID);
        leftPos = 0;
    }
}
4

2 に答える 2

0

var slideList = this.getElementsByTagName("ul")[0];

于 2013-06-29T21:02:21.367 に答える
0

あなたのコードを見ているだけで、この行があることに気付きました

var slideList = this.id + ".ul[0]"; //stores object ref to the 1st ul element nested

ul 配列の最初の要素を取得しようとしているように見えますが、それを引用符で囲んでいるため、ブラウザはそれを代わりに文字列として扱っている可能性があります。this.id が文字列 "ul-element" と等しいとします。この変数は、ul[0] で要素を取得するのではなく、文字列として "ul-element.ul[0]" を出力します。

好奇心から、jquery を使用してサイトでこれを行うことを検討していますか? 個人的なプロジェクトでこれを行う場合は、この方法で行うことを理解していますが、かなりの時間と頭痛の種を節約できます:)

-フランク

于 2013-06-22T17:59:20.330 に答える