Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Почему не робит? (https://javascript.ru/forum/events/39961-pochemu-ne-robit.html)

Чернышков Николай 18.07.2013 21:51

Почему не робит?
 
window.onload = function () {
	var tabs = document.getElementById('tabMenu').getElementsByTagName("*");
	for (var i=0;i<=tabs.length-1;i+=2) {
		var tabID = tabs[i+1].id;
		console.log(tabID);
		document.getElementById('tabMenu').childNodes[i+1].childNodes[0].onclick = function() {tabSwitch(tabID);}
	}
}


Хочу навесить на три элемента динамически обработчик onclick события, вешается, но только tabID равен индексу последней третьей табы и переключение любое приводит к переходу на последнюю вкладку. В консоли чисто, tabID последовательно равен 1,2,3...В чем загвоздка? Код самого tabSwitch думаю, приводить не стоит, там все прозрачно и работает правильно, если обработчики повесить напрямую в свойстве onClick элементов. НО хочется же докопаться до истины, потому такой вариант прошу не предлагать. Чтобы не развивать Ваши телепатические способности, верстка:

<ul id="tabMenu">  
    <li><a id="tab-1" class="active">Первая</a></li>  
    <li><a id="tab-2">Вторая</a></li>  
    <li><a id="tab-3">Третья</a></li>
</ul>
<div id="tabContent">
    <div id="content-1">
        11111111111
    </div>
    <div id="content-2">
        22222222222
    </div>
    <div id="content-3">
        33333333333
    </div>
</div>

рони 18.07.2013 22:18

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

сделать что ли шаблон если квери аякс смотрите on если проблемы с циклом смотрите замыкания

vadim5june 18.07.2013 22:35

удалил

danik.js 18.07.2013 23:21

Да не нужны никакие замыкания.

<ul id="tabMenu"> 
    <li><a id="tab-1" href="#content-1" class="active">Первая</a></li> 
    <li><a id="tab-2" href="#content-2">Вторая</a></li> 
    <li><a id="tab-3" href="#content-3">Третья</a></li>
</ul>
<div id="tabContent">
    <div id="content-1">
        11111111111
    </div>
    <div id="content-2">
        22222222222
    </div>
    <div id="content-3">
        33333333333
    </div>
</div>
<script>
(function(){
    var tabs = document.getElementById('tabMenu').getElementsByTagName("a");
    for (var i = 0; i < tabs.length; i++) {
        tabs[i].onclick = onclick;
    }

    function onclick() {
        var id = this.hash.substring(1);
        alert(id);
    }
})()
</script>

Чернышков Николай 21.07.2013 19:54

Рони спасибо!!! Даник.js , ты проверь, прежде чем что-то рекомендовать!!!

danik.js 21.07.2013 21:00

Вобще то цель - показать как можно получить id без всяких замыканий, а не показ/скрытие !!!

Чернышков Николай 22.07.2013 13:50

Я просил совсем о другом...

danik.js 22.07.2013 14:25

Цитата:

Сообщение от Чернышков Николай
Я просил совсем о другом...

Фантазии совсем нет, да?
Вместо alert(id) написать tabSwitch(id) . Разница в одной строчке и это уже "совсем другое" ?


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