Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Обработчики событий (https://javascript.ru/forum/events/28403-obrabotchiki-sobytijj.html)

Nickolas 18.05.2012 11:52

Обработчики событий
 
Доброго времени суток!
Друзья, помогите новичку разобраться. Вопрос такой: через циклы на страницу добавляются 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);
			}

bot87 18.05.2012 12:51

ты ведь создаешь элементы с одинаковым id!Это против правил
newButt1.id = 'butt1';.
Можно как вариант такое
function createNewButt2(j) {
              
                newButt2.id = 'butt2'+j;
               
            }


function addNewButts1() {
	                var i=1;
	                while (i<=5) {
	                createNewButt1(i);
	                i++;
	                }

bot87 18.05.2012 13:20

вот тебе часть рулона
<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>
.Не могу удалить кнопку

bes 18.05.2012 21:25

На мой взгляд, группу кнопок лучше сразу помещать в блок (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>

bes 19.05.2012 08:50

Да и наверное 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, время: 16:44.