Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Onclick в for (https://javascript.ru/forum/css-html/35449-onclick-v.html)

BorodinKO 11.02.2013 12:09

Onclick в for
 
Надо вывести порядковый номер элемента при нажатии на него

<div class="tag">
<a href="#">qwerty</a>
<a href="#">qwerty</a>
<a href="#">qwerty</a>
<a href="#">qwerty</a>
</div>

Делаю так

t = document.getElementsByClassName('tag')[0].getElementsByTagName('a');
for(i=0;i<t.length;i++){
t[i].onclick = function(){
alert(i);
}
}

В итоге алерт выдает пустату

danik.js 11.02.2013 13:22

<div class="tag">
<a href="#">qwerty</a>
<a href="#">qwerty</a>
<a href="#">qwerty</a>
<a href="#">qwerty</a>
</div>
<script>
(function(){
    var wrapper = document.getElementsByClassName('tag')[0];
    var tags = Array.prototype.slice.call(wrapper.getElementsByTagName('a'));
    wrapper.onclick = function(event) {
        var index = tags.indexOf(event.target);
        if (index !== -1) {
            alert(index);
            event.preventDefault();
        }
    };
})();
</script>


либо ваш вариант, исправленный:

<div class="tag">
<a href="#">qwerty</a>
<a href="#">qwerty</a>
<a href="#">qwerty</a>
<a href="#">qwerty</a>
</div>
<script>
(function(){
    var wrapper = document.getElementsByClassName('tag')[0];
    var tags = wrapper.getElementsByTagName('a');
    for (var i = 0; i < tags.length; i ++) {
        tags[i].onclick = (function(i) {
            return function(event) { alert(i) };
        })(i);
    }
})();
</script>


Часовой пояс GMT +3, время: 11:54.