Обработчики событий
Доброго времени суток!
Друзья, помогите новичку разобраться. Вопрос такой: через циклы на страницу добавляются 2 набора кнопок. Не могу понять как идентифицировать конкретную кнопку из набора. Тоесть, как добавить обработчики событий для каждой из кнопок? Смысл в том, чтобы, к примеру, при нажатии на любую из кнопок первого набора она оборачивалась в тэг div, а при нажатии на любую кнопку из второго набора - в тэг pre. Извините за сумбурность. Заранее спасибо. function addNewButts1() { var i=1; while (i<=5) { createNewButt1(); i++; } } function addNewButts2() { var i=1; while (i<=5) { createNewButt2(); i++; } } function createNewButt1() { var parent = document.getElementsByTagName('body')[0]; var newButt1 = document.createElement('input'); newButt1.type = 'button'; newButt1.value = 'Change Button'; newButt1.id = 'butt1'; parent.appendChild(newButt1); } function createNewButt2() { var parent = document.getElementsByTagName('body')[0]; var newButt2 = document.createElement('input'); newButt2.type = 'button'; newButt2.value = 'Wrap Button'; newButt2.id = 'butt2'; parent.appendChild(newButt2); } |
ты ведь создаешь элементы с одинаковым id!Это против правил
newButt1.id = 'butt1';. Можно как вариант такое function createNewButt2(j) { newButt2.id = 'butt2'+j; } function addNewButts1() { var i=1; while (i<=5) { createNewButt1(i); i++; } |
вот тебе часть рулона
<script> function handler(e){ div1=document.createElement('div') div1.appendChild(this) document.body.appendChild(div1) //this.parentNode.removeChild(this) } function handler2(e){ alert('2') } function addNewButts1() { var i=1; while (i<=5) { createNewButt1(i); i++; } } function addNewButts2() { var i=1; while (i<=5) { createNewButt2(i); i++; } } function createNewButt1(i) { var parent = document.getElementsByTagName('body')[0]; var newButt1 = document.createElement('input'); newButt1.type = 'button'; newButt1.value = 'Change Button'; newButt1.id = 'butt1'+i; parent.appendChild(newButt1); } function createNewButt2(j) { var parent = document.getElementsByTagName('body')[0]; var newButt2 = document.createElement('input'); newButt2.type = 'button'; newButt2.value = 'Wrap Button'; newButt2.id = 'butt2'+j; parent.appendChild(newButt2); } addNewButts1() addNewButts2() reg1=/butt1/ reg2=/butt2/ inputs=document.getElementsByTagName('input') eventType = document.addEventListener ? ["addEventListener", ""] : ["attachEvent", "on"]; for(k=0;k<inputs.length;k++){ if(reg2.test(inputs[k].getAttribute('id'))){ //inputs[k].addEventListener('click',handler,false) inputs[k][ eventType[ 0 ] ]( eventType[ 1 ] + "click", function( e ){ e = e || window.event; handler.call( e.target || e.srcElement, e ); }, false ); }else{ inputs[k][ eventType[ 0 ] ]( eventType[ 1 ] + "click", function( e ){ e = e || window.event; handler2.call( e.target || e.srcElement, e ); }, false ); } } </script>.Не могу удалить кнопку |
На мой взгляд, группу кнопок лучше сразу помещать в блок (div, span,...), хотя бы для того, чтобы на него, при необходимости, повесить один обработчик (а не на все элементы по обработчику).
Кнопки также можно добавлять строкой в innerHTML. Думаю из этого примера можно понять о чём речь. <style> pre {background: green} /*когда обернётся фон станет зелёным*/ </style> <input type="button" value="+" onclick="create('pre wrap', 5, 'pre')"> <script> function create (name, amount, wrapping) { //добавляем новый блок var newDiv = document.createElement('div'); document.body.appendChild(newDiv); //назначаем ему обработчик newDiv.onclick = function () { newDiv.innerHTML = '<' + wrapping + '>' + newDiv.innerHTML + '</' + wrapping + '>'; alert(newDiv.innerHTML); //для посмотра, что получилось }; //добавляем кнопки в блок var str = '<input type="button" value="' + name + '" >'; for (var i = 0; i < amount; i++) { newDiv.innerHTML += str; } } </script> |
Да и наверное innerHTML лучше в цикле не гонять.
<style> pre {background: green} /*когда обернётся, фон станет зелёным*/ </style> <input type="button" value="+" onclick="create('pre wrap', 5, 'pre')"> <script> function create (name, amount, wrapping) { //добавляем новый блок var newDiv = document.createElement('div'); document.body.appendChild(newDiv); //назначаем ему обработчик newDiv.onclick = function () { newDiv.innerHTML = '<' + wrapping + '>' + newDiv.innerHTML + '</' + wrapping + '>'; alert(newDiv.innerHTML); //для посмотра, что получилось }; //добавляем кнопки в блок var butStr = '<input type="button" value="' + name + '" >'; var str = ''; for (var i = 0; i < amount; i++) { str += butStr; } newDiv.innerHTML = str; } </script> |
Часовой пояс GMT +3, время: 12:52. |