Следует избегать использования встроенных обработчиков * ( onclick , oninput и т. Д.) И вместо этого использовать прослушиватель событий в самом сценарии для оповещения о текстовом содержимом элементов.
Проверьте и запустите следующий фрагмент кода для практического примера того, что я описал выше:
/* JavaScript */
var btns = document.querySelectorAll(".fonts"); // retrieve all buttons
//use forEach() to add a click event listener to each button
btns.forEach(function (btn) {
btn.addEventListener("click", function() {
alert(this.innerHTML);
});
});
<!-- HTML -->
<button class="fonts" value="2">Times New Roman</button><br>
<button class="fonts" value="1">Calibri</button><br>
<button class="fonts" value="3">Arial</button>
Вы можете дополнительно сократить приведенный выше код, используя вместо этого JavaScript ES6 +, например:
document.querySelectorAll(".fonts").forEach(btn => {
btn.addEventListener("click", () => alert(btn.innerHTML));
});
<button class="fonts" value="2">Times New Roman</button><br><button class="fonts" value="1">Calibri</button><br><button class="fonts" value="3">Arial</button>
NB Обратите внимание, что если вы используете подход ES6 +, вам потребуется использовать компилятор JavaScript, такой как Babel для преобразования вашего синтаксиса ES6 + в обратно совместимую версию JavaScript на производстве для поддержки текущих и старых браузеров или сред.
Совместимость с IE11:
Если вас беспокоитIE11-совместимость метода forEach()
, вы можете использовать простой for loop
вместо этого, например:
/* JavaScript */
var btns = document.querySelectorAll(".fonts"); // retrieve all buttons
//use forEach() to add a click event listener to each button
for(i=0; i < btns.length; i++) {
btns[i].addEventListener("click", function() {
alert(this.innerHTML);
});
}
<!-- HTML -->
<button class="fonts" value="2">Times New Roman</button><br>
<button class="fonts" value="1">Calibri</button><br>
<button class="fonts" value="3">Arial</button>