Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.03.2012, 11:56
Новичок на форуме
Отправить личное сообщение для Andruha Посмотреть профиль Найти все сообщения от Andruha
 
Регистрация: 16.03.2012
Сообщений: 4

createElement("a")&onclick
Есть код по динамическому созданию 10 элементов <a>... Вопрос с событием onclick: все созданные ссылки по клику дают alert 9 ???? Почему собственно? Как ремонтировать?

for(var i=0; i<10; i++)
{
var new_a = document.createElement("a");
new_a.onclick='alert(i)';
new_a.href='javascript:';
var textNode = document.createTextNode(i);
new_a.appendChild(textNode);
}

спасибо...
Ответить с цитированием
  #2 (permalink)  
Старый 16.03.2012, 12:01
Аватар для T-sh
Профессор
Отправить личное сообщение для T-sh Посмотреть профиль Найти все сообщения от T-sh
 
Регистрация: 04.12.2009
Сообщений: 579

var new_a...
var textNode...


вы каждый раз перезаписываете значение переменной. по прошествии цикла остаётся только последнее значение.
__________________
С моих слов записано верно.
Ответить с цитированием
  #3 (permalink)  
Старый 16.03.2012, 12:01
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

new_a.onclick=function(i) {
    return function() { alert(i); }
}(i)
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #4 (permalink)  
Старый 16.03.2012, 12:23
Новичок на форуме
Отправить личное сообщение для Andruha Посмотреть профиль Найти все сообщения от Andruha
 
Регистрация: 16.03.2012
Сообщений: 4

а, ну да!!! пару строк не дописал...

var list = document.getElementById('div'); // Блок
for(var i=0; i<10; i++)
{
var new_a = document.createElement("a");
new_a.onclick='alert(i)';
new_a.href='javascript:';
var textNode = document.createTextNode(i);
new_a.appendChild(textNode);
list.appendChild(new_a);
}
ничего не перетираю, появляются 10 ссылок но все они дают alert 9 ?!
Ответить с цитированием
  #5 (permalink)  
Старый 16.03.2012, 12:41
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

<div id="div"></div>
<script type="text/javascript">
    var list = document.getElementById('div'); // Блок
    for( var i = 0; i < 10; i++ ) { 
       var new_a = document.createElement("a");
       new_a.onclick = function(i) {
           return function() { alert(i); }
       }(i);
       new_a.href = 'javascript:';
       var textNode = document.createTextNode(i);
       new_a.appendChild(textNode);
       list.appendChild(new_a);
   }
</script>
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #6 (permalink)  
Старый 16.03.2012, 12:51
Аватар для T-sh
Профессор
Отправить личное сообщение для T-sh Посмотреть профиль Найти все сообщения от T-sh
 
Регистрация: 04.12.2009
Сообщений: 579

Сообщение от Andruha Посмотреть сообщение
а, ну да!!! пару строк не дописал...

var list = document.getElementById('div'); // Блок
for(var i=0; i<10; i++)
{
var new_a = document.createElement("a");
new_a.onclick='alert(i)';
new_a.href='javascript:';
var textNode = document.createTextNode(i);
new_a.appendChild(textNode);
list.appendChild(new_a);
}
ничего не перетираю, появляются 10 ссылок но все они дают alert 9 ?!
причем тут 10 ссылок? у вас по онклику у всех ссылок "alert(i)". а после завершения цикла i равно 9.

либо делайте функцией, как написал devote, либо:
new_a.onclick="alert("+i+")";

хотя сомневаюсь, что так будет работать.
__________________
С моих слов записано верно.
Ответить с цитированием
  #7 (permalink)  
Старый 16.03.2012, 12:55
Новичок на форуме
Отправить личное сообщение для Andruha Посмотреть профиль Найти все сообщения от Andruha
 
Регистрация: 16.03.2012
Сообщений: 4

ух ты!!!!! работает!!!! devote Рулит!!! спасибо + всем спасибо...

function(i) {return function() { alert(i); } }(i);
что за скобки такие? (i) {...}(i); не встречал ещё...
Ответить с цитированием
  #8 (permalink)  
Старый 16.03.2012, 12:58
Аватар для T-sh
Профессор
Отправить личное сообщение для T-sh Посмотреть профиль Найти все сообщения от T-sh
 
Регистрация: 04.12.2009
Сообщений: 579

Сообщение от Andruha Посмотреть сообщение
ух ты!!!!! работает!!!! devote Рулит!!! спасибо + всем спасибо...

function(i) {return function() { alert(i); } }(i);
что за скобки такие? (i) {...}(i); не встречал ещё...
в первых — параматре функции, вторые — вызов с параметром.
__________________
С моих слов записано верно.
Ответить с цитированием
  #9 (permalink)  
Старый 16.03.2012, 13:04
Новичок на форуме
Отправить личное сообщение для Andruha Посмотреть профиль Найти все сообщения от Andruha
 
Регистрация: 16.03.2012
Сообщений: 4

тю, блин!!!! первый класс вторая четверть... sorry за вопрос... всем спасибо!!!
Ответить с цитированием
  #10 (permalink)  
Старый 16.03.2012, 14:36
Профессор
Отправить личное сообщение для tadjik1 Посмотреть профиль Найти все сообщения от tadjik1
 
Регистрация: 07.06.2011
Сообщений: 315

это классическая ошибка начинающих в javascript, сам над ней недавно сидел часа полтора, пока не догадался справочник открыть
Ответить с цитированием
Ответ



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

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