Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.04.2013, 02:50
Кандидат Javascript-наук
Отправить личное сообщение для фонарик Посмотреть профиль Найти все сообщения от фонарик
 
Регистрация: 23.02.2013
Сообщений: 127

Как правильно повесить функцию при цикличном создании div блоков?
Доброго времени суток. Подскажите пожалуйста, как нужно правильно повесить функцию в данном примере, чтобы в алерт вывелось название элемента по которому создался блок?
Никак не могу допетрить. Можно, конечно, присвоить создаваемому блоку id с одноименным названием из массива, и потом послать его в алерт - но этот вариант не подходит.
<style type="text/css">
.div_class{position:relative; display: inline-block; background-color:gray; border:1px solid red; width:30px; height:30px; margin-left:5px; cursor:pointer;}
.div_class:hover{background-color:green;}
</style>
<body>
<script>
var arr = ["raz","dva","tri"]

for(i=0; i<arr.length; i++){
var box_div = document.createElement('div')
	box_div.className='div_class'
	document.body.appendChild(box_div)
	box_div.onmouseup=function(){alert(arr[i])}
}
</script>
Ответить с цитированием
  #2 (permalink)  
Старый 05.04.2013, 07:45
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

<style type="text/css">
.div_class{position:relative; display: inline-block; background-color:gray; border:1px solid red; width:30px; height:30px; margin-left:5px; cursor:pointer;}
.div_class:hover{background-color:green;}
</style>
<body>
<script>
var arr = ["raz","dva","tri"]

for(i=0; i<arr.length; i++){
var box_div = document.createElement('div');
	box_div.className='div_class';
	document.body.appendChild(box_div);
    addHandler.call(box_div, arr[i]);	
}

function addHandler(num) {
  this.onmouseup=function(){alert(num);};
};
</script>


Не буду претендавать на то что мое решение самое верное.

Последний раз редактировалось tsigel, 05.04.2013 в 07:49.
Ответить с цитированием
  #3 (permalink)  
Старый 05.04.2013, 08:12
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Классическая ошибка. Ваша функция onmouseup будет вызвана уже после окончания цикла, по событию mouseup. А к этому времени значение i проитерируется с 0 до 4 и четверкой так и останется. В итоге arr[4] == undefined.

Вариант:

<style type="text/css">
.div_class{position:relative; display: inline-block; background-color:gray; border:1px solid red; width:30px; height:30px; margin-left:5px; cursor:pointer;}
.div_class:hover{background-color:green;}
</style>
<body>
<script>
var arr = ["raz","dva","tri"]
var fn = function(i, e) {
    alert(arr[i])
}
var ret = function(i) {
    return function(e) {
        fn.apply(this, [i, e])
    }
}
for(var i=0; i<arr.length; i++){
var box_div = document.createElement('div')
    box_div.className='div_class'
    document.body.appendChild(box_div)
    box_div.onmouseup= ret(i)
}
</script>
Ответить с цитированием
  #4 (permalink)  
Старый 05.04.2013, 19:31
Кандидат Javascript-наук
Отправить личное сообщение для фонарик Посмотреть профиль Найти все сообщения от фонарик
 
Регистрация: 23.02.2013
Сообщений: 127

Всё верно, всё правильно Я уже понял что нужно в алерт выводить другой функцией, открыл для себя интересный метод call )) Спасибо вам ребята
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как правильно наложить полупрозрачный div на другой? palermo Элементы интерфейса 2 04.04.2012 12:09
Как сделать, чтобы при удалении div браузер не перепрыгивал наверх станицы EvgeniyRRU Events/DOM/Window 4 02.10.2011 12:42
Как правильно подавить событие при подключении своего обработчика? Маэстро Firefox/Mozilla 2 03.09.2011 11:46
Как из функции вызвать другую функцию и правильно передать ей параметр Alexd Общие вопросы Javascript 3 06.05.2011 03:42
Как правильно послать XML в POST запросе LowCoder AJAX и COMET 10 15.07.2009 23:20