Сообщение от JaneLane
|
М,а если нужно изменить сам атрибут?я клонирую узлы вместе с обработчиком,и мне нужно поменять параметры в функции,если изменять атрибут методом setAttribute,то функция выполняется сразу же,не по нажатию, а способом выше по клику ничего не происходит(
|
Так а не проще при клонировании на клон новый обработчик вешать? Можно сделать функцию которая будет клонировать узел, принимать параметры и вешать нужный обработчик с нужными параметрами. Или вообще хранить параметры функции в каком-нибудь артрибуте узла и в функции брать их уже из кликнутого элемента.
В общем что-то типо этого:
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<form>
a: <input type="text" name="a" value="5"><br>
b: <input type="text" name="b" value="3"><br>
<input type="button" value="clone link" onclick="cloneLink(this.form)">
</form>
<a href="#" id="test">test</a><br>
<script>
function setEvent(c, name, action)
{
if (c.addEventListener) {
c.addEventListener( name, action, false );
}
else if (c.attachEvent) {
c.attachEvent("on" + name, action);
}
else {
c["on" + name] = action;
}
}
function someFunc(a, b) {
alert(a + ',' + b);
}
function cloneAndAddHandler(el, a, b) {
var clone = el.cloneNode(true);
setEvent(clone, 'click', function() { someFunc(a, b); });
return clone;
}
function cloneLink(form) {
var el = document.getElementById('test');
var a = form.elements.a.value;
var b = form.elements.b.value;
var newA = cloneAndAddHandler(el, a, b);
newA.innerHTML = 'test' + a + ',' + b;
document.body.appendChild(newA);
document.body.appendChild( document.createElement('br') );
}
</script>
</body>
</html>