добавление нескольких addEventListener к определенной функции - PullRequest
0 голосов
/ 01 декабря 2011

Спасибо за вашу помощь. Я хочу сделать несколько AddEventListener для конкретной функции, но результат не то, что я хочу. я всегда получаю последнего ребенка в списке.

почему ??

это код:

первый раздел:

<script>  
    var inside_elm= new Array();
    inside_elm[1]="inside_e1";
    inside_elm[2]="inside_e2";
    inside_elm[3]="inside_e3";

    var kk = {      
        showBox :function(elm){
            alert(elm);
            document.getElementById(elm).style.display='block';
        }
    }

    function load() {
        var e_elm= new Array();
        e_elm[1]="e1";
        e_elm[2]="e2";
        e_elm[3]="e3";

        for(var i=1;i<3;i++){
            var k=e_elm[i];
            alert(inside_elm[i]);

            document.getElementById(e_elm[i]).addEventListener('click',function(){kk.showBox(inside_elm[i])},false);
        }
    }
    </script>

корпус:

  <body onload="load();">
    <div id="e1">
        e1
        <div id="inside_e1" style="display:none;">inside_e1</div>
    </div>

    <div id="e2">
        e2
        <div id="inside_e2" style="display:none;">inside_e2</div>
    </div>
    <div id="e3">
        e3
        <div id="inside_e3" style="display:none;">inside_e3</div>
    </div>

Ответы [ 2 ]

1 голос
/ 02 декабря 2011

В основном это связано с тем, что он не оценивает 'i' до тех пор, пока не выполнится функция, на каком этапе она установлена ​​на 3.

То, что вы хотите сделать, это использовать что-то вроде следующего:

for(var i=1;i<4;i++){
    var k=e_elm[i];
    alert(inside_elm[i]);

    var elm = document.getElementById(e_elm[i]);
    elm.inside_elm = inside_elm[i];
    elm.addEventListener('click', function(){kk.showBox(this.inside_elm)},false);
}
1 голос
/ 01 декабря 2011

Я думаю, что до следующего или, по крайней мере, это не поможет.

for(i = 1;i < 3;i++){
....
}

Получит доступ только к первым двум атомам вашего массива и выйдет из цикла перед повторением третьеговремя.Попробуйте

for(i = 1;i < 4;i++){
....
}

Точно так же рекомендуется запускать индексы массива с 0, в этом случае

for(i = 0;i<3;i++){
....
}

будет перебирать каждый (при условии, что начальный индекс равен 0)

...