Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   onclick динамически созданного объекта (https://javascript.ru/forum/events/31285-onclick-dinamicheski-sozdannogo-obekta.html)

Fobo$ 01.09.2012 13:43

onclick динамически созданного объекта
 
Добрый всем день!
У меня на голом JS в цикле динамичести создаются элементы и им устанавливается событие onclick
for (...) {
                          ...
	    	var link = document.createElement("a");
    		link.textContent = "blabla";
    		link.href = '#';
    		link.onclick = function() { ajaxCall(param); return false; };
    		div.appendChild(link);
		}

беда в том, что мне не удается передать в функцию ajaxCall значение переменной param: передается не значение, а сама переменная, которая на момент клика уже не существует, что вызывает ошибку. param вычисляется в каждой итерации цикла для каждого объекта своя.
Конечно, можно было бы сделать
link.onclick = "ajaxCall(" + param + ")";

Но FF такую конструкцию не принимает.
Также пробовал устанавливать link.name=param и в ajaxCall обращаться как self.name - такое тоже не работает. Помогите, плз, уже с этим замучался....

lord2kim 01.09.2012 15:13

Fobo$, выводите в виде строки
<div id="div"></div>
<script>
function abc(param) {
    alert(param);
}
 
var div = document.getElementById("div");
for (i=0; i< 6; i++) {
	div.innerHTML += "<a href='#' onClick='abc("+i+")'>blablabla</a><br>";
}
</script>

Fobo$ 02.09.2012 19:11

лучшее враг хорошему - пытался все красиво по DOM-у сделать и забыл про такое тривиальное решение.
Спасибо!!!

devote 02.09.2012 19:14

lord2kim,
очень плохое решение использвать так innerHTML

Fobo$,
просто:
link.onclick = (function(param){ return function() { ajaxCall(param); return false; } })(param);


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