#javascript #html #dom
#javascript #HTML #dom
Вопрос:
Я предполагаю, что мне не хватает некоторых основ html, javascript, DOM и распространения или чего-то подобного, но я не могу найти ни одного соответствующего вопроса / ответа.
Вот мой код :
<html>
<head>
<script type="text/javascript">
function click(e) {
alert(e.target.id);
}
</script>
</head>
<body>
<input type="button" id="btn1" onclick="alert(event.target.id);" value="MyButton1">
<input type="button" id="btn2" onclick="click(event);" value="MyButton2">
</body>
</html>
MyButton1
работает нормально. MyButton2
не запускает событие onclick.
Вопрос прост: почему MyButton2
событие не запускается?
Ответ №1:
Поскольку в элементе DOM, соответствующем элементу button, есть метод click, назовите свою функцию как угодно, кроме click
:
<html>
<head>
<script type="text/javascript">
function clickMe(e) {
alert(e.target.id);
}
</script>
</head>
<body>
<input type="button" id="btn1" onclick="alert(event.target.id);" value="MyButton1">
<input type="button" id="btn2" onclick="clickMe(event);" value="MyButton2">
</body>
</html>
Пожалуйста, обратите внимание: вам следует избегать использования встроенного обработчика событий, вместо этого вы можете использовать addEventListener()
:
<html>
<head>
<script type="text/javascript">
window.addEventListener('DOMContentLoaded', () => {
document.getElementById('btn1').addEventListener('click', alertMessage);
document.getElementById('btn2').addEventListener('click', alertMessage);
});
function alertMessage(e){
alert(e.target.id);
}
</script>
</head>
<body>
<input type="button" id="btn1" value="MyButton1">
<input type="button" id="btn2" value="MyButton2">
</body>
</html>
Комментарии:
1. Спасибо 🙂 Есть ли какая-либо спецификация, показывающая, что
click
это своего рода зарезервированное имя функции?2. @Tuckbros, поскольку в элементе DOM, соответствующем элементу button, есть метод click, вы не должны его использовать 🙂
3. то же самое происходит с
search
Ответ №2:
Или вы могли бы сделать это! Сохраняя имя функции таким же!
На самом деле я бы предложил сделать это таким образом (установив эти атрибуты из скрипта)
<html>
<head>
</head>
<body>
<input type="button" id="btn1" onclick="alert(event.target.id);" value="MyButton1">
<input type="button" id="btn2" value="MyButton2">
<script type="text/javascript">
function click(e) {
alert(e.target.id);
}
document.getElementById("btn2").onclick = click;
</script>
</body>
</html>