Клонированные эл-ты не отвечают на onclick
При нажатии на кнопку она клонируется, почему в данном случае клонированные кнопки не отвечают на onclick??? срабатывает только первая.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" > <style> input[value = "+"] { height: 20px; width: 20px; } </style> </head> <body> <div> <input type="button" id="add" value="+"> </div> </body> <script> var add = document.querySelectorAll("input[value = '+']"); add[add.length - 1].onclick = function() { var parent = this.parentNode; var clone = this.cloneNode(true); parent.appendChild(clone); add = document.querySelectorAll("input[value = '+']"); } </script> </html> |
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>ГГ</title>
<style>
* {
margin:0;
padding: 0;
outline: none;
}
input[value = "+"] {
height: 20px;
width: 20px;
}
</style>
</head>
<body>
<div>
<input type="button" id="add" value="+" onclick="var parent = this.parentNode;var clone = this.cloneNode(true);parent.appendChild(clone);">
</div>
</body>
</html>
|
BeardedFace,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" >
<script src="//code.jquery.com/jquery-1.11.3.min.js"></script>
<style>
input[value = "+"] {
height: 20px;
width: 20px;
}
</style>
</head>
<body>
<div>
<input type="button" class="add" value="+">
</div>
</body>
<script>
var add = document.querySelectorAll("input[value = '+']"); // Возвращает non-live NodeList всех соответствующих узлов элемента
add[add.length - 1].onclick = function() {
var parent = this.parentNode;
var clone = this.cloneNode(true);
alert(clone.onclick);
clone.onclick = this.onclick;
alert(clone.onclick);
parent.appendChild(clone);
add = document.querySelectorAll("input[value = '+']");
}
</script>
</html>
|
Очень благодарен, а можно подробнее про non-live Nodelist, что конкретно это значит, динамически созданные эл-ты в эту коллекцию не попадают?
правильно понял? |
BeardedFace,
у Вас всё нормально , Вы строкой в onclick :
add = document.querySelectorAll("input[value = '+']")
возвращаете новый набор, просто забыл удалить комментарий )) А вообще про это можно почитать здесь http://learn.javascript.ru/searching-elements-internals |
А почему без clone.onclick = this.onclick событие не передается следующему эл-ту? ведь эл-т создан, добавлен в add[], почему не работает add[add.length - 1].onclick ?
|
BeardedFace,
в документации сказано : Cloning a node copies all of its attributes and their values, including intrinsic (in–line) listeners. It does not copy event listeners added using addEventListener() or those assigned to element properties. (e.g. node.onclick = fn) :) |
Всё стало ясно, огромное благодарю!))
|
| Часовой пояс GMT +3, время: 13:28. |