У меня есть эта встроенная функция java-script, которая создает абзац и вызывается при нажатии кнопки. То, что я не понимаю, - это код условия в цикле for. Что значит итерации, пока не достигнет button.length? (Увидев, что каждый раз, когда я нажимаю кнопку, eventListener ловит его и печатает текст в браузере до бесконечности).
<script>
function createParagraph()
{
var para = document.createElement('p');
para.textContent = 'You Clicked a button!';
document.body.appendChild(para);
}
var buttons = document.querySelectorAll('button');
for (var i = 0; i < buttons.length; i++)
{
buttons[i].addEventListener('click', createParagraph);
}
</script>
Пройдите через это шаг за шагом:
1) Функция createParagraph():
function createParagraph() {
var para = document.createElement('p');
para.textContent = 'You Clicked a button!';
document.body.appendChild(para);
}
Что это значит, создается ли элемент <p>
, содержащий сообщение "Вы нажали кнопку!". и добавляет его в DOM.
2) QuerySelector:
var buttons = document.querySelectorAll('button');
Он находит каждый элемент, соответствующий данному селектору - в данном случае - все кнопки. Он возвращает их, в этом случае мы сохраняем их в переменной.
3) Цикл for:
for (var i = 0; i < buttons.length; i++)
{
buttons[i].addEventListener('click', createParagraph);
}
Это на самом деле очень просто. Он выполняет итерацию для каждой из кнопок в массиве кнопок - это наш массив элементов кнопок, которые мы создали с помощью нашего QuerySelector выше, и добавляет к нему EventListener
. В свою очередь, этот EventListener
обрабатывает события click
, запустив нашу функцию, описанную на шаге 1.
Если вы все это соедините:
Каждый раз, когда вы нажимаете кнопку (любая кнопка на странице), в DOM добавляется элемент <p>
, который будет включать сообщение " You Clicked a button!
,
В принципе, привязка события click ко всем кнопкам вашего HTML.
Ваш код привязывает событие click
к кнопкам
function createParagraph() {
var para = document.createElement('p');
para.textContent = 'You Clicked a button!';
document.body.appendChild(para);
}
var buttons = document.querySelectorAll('button');
for (var i = 0; i < buttons.length; i++) {
buttons[i].addEventListener('click', createParagraph);
}
<button>
Click me!
</button>
<button>
Click me!
</button>
<button>
Click me!
</button>
<button>
Click me!
</button>
<button>
Click me!
</button>
Наблюдение за некоторыми учебниками по "core javaScript", вероятно, поможет вам. В частности, узнайте о циклах и итерации по массивам.
В вашем коде вы добавляете "event-listener" ко всем своим "кнопкам". Упрощенные шаги для этого:
Храните этот массив в переменной var buttons = document.querySelectorAll('button');
Теперь кнопки [0] указывают на первый элемент {tagName: button}. кнопки [1] указывают на вторую кнопку в списке и т.д.
var buttons = document.querySelectorAll('button');
var кнопки получат массив всех элементов кнопки на странице.
buttons.length - это длина этого array- количества элементов кнопки на странице.
for (var i = 0; i < buttons.length; i++)
Цикл будет повторяться один раз для каждого элемента кнопки, который существует (длина массива кнопок).
buttons[i]
Относится к элементу i-ой кнопки на странице.
buttons.length
представляет количество элементов вNodeList
. Другими словами, количество элементовbutton
в вашем документе.