Показать сообщение отдельно
  #7 (permalink)  
Старый 19.04.2014, 16:45
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 15.03.2014
Сообщений: 561

Сообщение от 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>

Последний раз редактировалось jsnb, 19.04.2014 в 17:08.
Ответить с цитированием