2016-04-14 3 views
0

В моем длинном многостраничном документе HTML я хочу включить несколько кнопок, которые выглядят одинаково и делают то же самое (location.reload();). С идеей не повторять код, я хотел бы сделать одно событие onclick, которое работает для всех из них. Но я не могу понять, как это сделать.Использование onclick с несколькими кнопками с JavaScript

Я пробовал играть, давая им все равно. Класс «reloadButton» вместо id, например <button class="reloadButton">Reload</button>. Затем я попытался использовать var reload = documents.getElementsByClassName("reloadButton");.

Но я не знаю, что делать дальше. Попытка что-то вроде reload.onclick = function() { location.reload(); } не работает.

Я не уверен, как использовать цикл for, чтобы пройти через весь массив, подобный HTMLCollection, когда он привязан к событию onclick.

Это просто чистый JavaScript, и мой уровень знаний также является чистым новичком. Поэтому мне бы это понравилось, если бы вы могли объяснить это тем, что было в уме, или если бы вы могли связать сайт, который объясняет это на уровне, который я мог бы понять. Спасибо!

+0

Вы используете JQuery или чистый JavaScript? –

+0

Я закрываю это как дубликат, потому что вы спрашиваете, как пройти через массивную структуру, на которую отвечает связанный вопрос. Добавление слушателей событий технически является отдельным вопросом, но опять-таки это вопрос, который задавался много раз. – zzzzBov

+0

Нет, он спрашивает, как назначить одинаковые функции многим кнопкам с тем же классом. – mplungjan

ответ

3

Plain JS:

window.onload=function() { // when the page has loaded 
    var bt = document.querySelectorAll(".reloadButton"); // get all buttons with the class 
    for (var i=0;i<bt.length;i++) { // newer browsers can use forEach 
    bt[i].onclick=function() { // assign anonymous handler 
     location.reload(); 
    } 
    } 
} 

или с именем функции

function reloadPage() { 
    location.reload(); 
} 
window.onload=function() { // when the page has loaded 
    var bt = document.querySelectorAll(".reloadButton"); // get all buttons with the class 
    for (var i=0;i<bt.length;i++) { // newer browsers can use forEach 
    bt[i].onclick=reloadPage; 
    } 
} 
+0

Спасибо. Пара вопросов: 1. почему querySelectorAll вместо getElementsByClassName 2. Требуется ли window.nload? Я экспериментировал без него, и это сработало. Так любопытно, если это необходимо. – Joe

+0

1: querySelectorAll является более совместимым и стандартным, чем getElementByClassName 2. Если вы поместите свой скрипт в en страницы после последней кнопки, то window.onload не понадобится, иначе это – mplungjan

+0

Ps: Я ухожу в постель – mplungjan

0

var buttons = document.querySelectorAll('.js-say-hi'); 
 
var displayBox = document.querySelector('.js-display-greeting'); 
 

 
// wire displayGreeting function to each button with .js-say-hi class 
 
for (var i=0; i<buttons.length; i++) { 
 
    buttons[i].addEventListener('click', displayGreeting) 
 
} 
 

 
function displayGreeting(event) { 
 
    var buttonNumber = event.target.textContent[event.target.textContent.length - 1]; 
 
    displayBox.textContent += 'hello from button ' + buttonNumber + '! '; 
 
}
<button class="js-say-hi">Say hi 1</button> 
 
<button class="js-say-hi">Say hi 2</button> 
 
<button class="js-say-hi">Say hi 3</button> 
 
<button class="js-say-hi">Say hi 4</button> 
 
<button class="js-say-hi">Say hi 5</button> 
 
<div class="js-display-greeting"></div>

+0

Зачем отвечать на несвязанный код? Кроме того, addEventListener не поддерживается более старыми IE – mplungjan

0

вы также можете просто использовать функцию с именем

function reloadPage() { 
    location.reload(); 
} 

, а затем вместо

<button class="reloadButton">Reload</button> 

использования

<button onclick="reloadpage();">Reload</button> 
+0

Однако это встроено в каждую кнопку. Не рекомендуется – mplungjan

+0

Я использую его, потому что он более читабельный, зависит от вкуса. –

+0

Inline обработчики событий не считается хорошей практикой – mplungjan

Смежные вопросы