Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.07.2013, 21:51
Новичок на форуме
Отправить личное сообщение для Чернышков Николай Посмотреть профиль Найти все сообщения от Чернышков Николай
 
Регистрация: 03.04.2013
Сообщений: 9

Почему не робит?
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:07.
Ответить с цитированием
  #2 (permalink)  
Старый 18.07.2013, 22:18
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,118

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

сделать что ли шаблон если квери аякс смотрите on если проблемы с циклом смотрите замыкания
Ответить с цитированием
  #3 (permalink)  
Старый 18.07.2013, 22:35
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

удалил
Ответить с цитированием
  #4 (permalink)  
Старый 18.07.2013, 23:21
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

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

<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>
Ответить с цитированием
  #5 (permalink)  
Старый 21.07.2013, 19:54
Новичок на форуме
Отправить личное сообщение для Чернышков Николай Посмотреть профиль Найти все сообщения от Чернышков Николай
 
Регистрация: 03.04.2013
Сообщений: 9

Рони спасибо!!! Даник.js , ты проверь, прежде чем что-то рекомендовать!!!
Ответить с цитированием
  #6 (permalink)  
Старый 21.07.2013, 21:00
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Вобще то цель - показать как можно получить id без всяких замыканий, а не показ/скрытие !!!
Ответить с цитированием
  #7 (permalink)  
Старый 22.07.2013, 13:50
Новичок на форуме
Отправить личное сообщение для Чернышков Николай Посмотреть профиль Найти все сообщения от Чернышков Николай
 
Регистрация: 03.04.2013
Сообщений: 9

Я просил совсем о другом...
Ответить с цитированием
  #8 (permalink)  
Старый 22.07.2013, 14:25
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Чернышков Николай
Я просил совсем о другом...
Фантазии совсем нет, да?
Вместо alert(id) написать tabSwitch(id) . Разница в одной строчке и это уже "совсем другое" ?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему так происходит? noname1990 Общие вопросы Javascript 2 23.11.2012 00:16
Почему Java-версия интерфейсов Node имеет не стандартизованные имена? dump Общие вопросы Javascript 0 10.08.2012 13:19
Почему некоторые операторы возвращают значения, а не ссылки? dump Общие вопросы Javascript 15 25.07.2012 17:28
Свойства объекта, методы и this. Почему свойство вызывается с () ? jsuse Общие вопросы Javascript 2 04.11.2011 20:39
Prototype. Одноблочное определение псевдокласса. Литеральная форма не робит. Почему? GuardCat Общие вопросы Javascript 6 03.10.2011 13:46