javascript - HTML 中的事件监听器与 addEventListener
问题描述
我想向 HTML 元素添加一个事件侦听器,它用自定义行为替换默认行为。我知道添加事件侦听器的两种不同方法:(1)使用 JavaScript 函数addEventListener
将事件添加到 DOM 元素:
<form class="my-form">
<input type="submit"/>
</form>
<script>
document.querySelectorAll(".my-form").forEach(form => {
form.addEventListener("submit", doSomething);
});
function doSomething(e) {
e.preventDefault();
console.log("Data received");
}
</script>
(2) 使用 HTML 属性on*
:
<form onsubmit="doSomething()">
<input type="submit"/>
</form>
<script>
function doSomething(e) {
e.preventDefault();
console.log("Data received");
}
</script>
但是,第一个做它应该做的,第二个没有。第二个代码仍然使用默认的提交处理程序。所以,我想知道第一个示例的行为是否可以通过 HTML 属性来实现。此外,我想知道通常首选哪种方式添加事件处理程序。
解决方案
使用第一个版本 - 但如果您只有一个表单,请不要使用 querySelectorAll。如果您只有一个表单,请给它一个 ID 并改用 document.getElementById。
如果你有很多,我会委托:
<div id="formContainer">
<form class="my-form">
<input type="submit"/>
</form>
<form class="my-form">
<input type="submit"/>
</form>
</div>
<script>
document.getElementById("formContainer").addEventListener("submit", function(e) {
e.preventDefault();
console.log("Data received");
});
</script>
做第二个,我们在上个千年曾经这样做过
<form onsubmit="return doSomething()">
<input type="submit"/>
</form>
<script>
function doSomething() {
console.log("Data received");
return false
}
</script>
但不推荐
推荐阅读
- javascript - 在 JavaScript 或 NodeJS 中使用 eval 作为原型方法名称
- azure - Jenkins Active Choices 参数与 Docker 以获取 Azure 标记
- python - 无法通过 url 删除。仅通过直接单击按钮
- c# - c# 转换字典
> 到词典 - php - PHP ImageMagick - 如何使用自动选择的字体大小功能在行和块内居中
- r - 如何将我的点与 geom_line() 连接起来?
- winforms - 通过 .resx Parent 属性本地化列表视图列标题
- angular - 在父组件的订阅块内更改@Input 指令的值时,在子组件中未检测到更改
- xcode - 如何通过 Xcode 构建包含 OpenCV 库(或其他 3rd 方库)的插件以供 Unity 使用?
- regex - bash 正则表达式匹配带有组分隔符的可选子字符串