三种事件绑定方式
- DOM里直接绑定事件
<button id="btn" onclick="submit()">提交</button>
<script>
function submit() {
console.log('DOM click......');
};
</script>
- js代码里获取DOM元素进行事件绑定
<button id="btn">提交</button>
<script>
document.getElementById('btn').onclick = function() {
console.log('脚本 click......');
};
</script>
- 通过监听处理相应的事件
<button id="btn">提交</button>
<script>
function submit() {
console.log('listener click......');
};
document.getElementById('btn').addEventListener('click', submit, false);
</script>
区别
- 在DOM结构如果绑定两个 “onclick” 事件,只会执行第一个
<button id="btn" onclick="submit1()" onclick="submit2()">提交</button>
<script>
function submit1() {
console.log('click1......'); // 执行这个
};
function submit2() {
console.log('click2......');
};
</script>
- 在脚本通过匿名函数的方式绑定的只会执行最后一个事件
<button id="btn">提交</button>
<script>
document.getElementById('btn').onclick = function() {
console.log('click1......');
};
document.getElementById('btn').onclick = function() {
console.log('click2......'); // 执行这个
};
</script>
- 用
addeventlistener
可以绑定同一个事件多次,且都会执行
<button id="btn">提交</button>
<script>
function submit1() {
console.log('click1......'); // 先执行
};
function submit2() {
console.log('click2......'); // 后执行
};
document.getElementById('btn').addEventListener('click', submit1, false);
document.getElementById('btn').addEventListener('click', submit2, false);
</script>
- 三种事件同时绑定时,DOM结构绑定的事件会失效,只执行脚本和监听绑定的事件,且脚本事件的执行优先级高于监听事件的优先级
注:脚本事件和DOM属性事件在本质上是一样的。因为元素属性事件是写在元素中的,所以它会首先触发,然后再触发JS中的事件(addEventListener事件、on事件)。当它们同时存在时,脚本事件会覆盖元素属性事件(本质相同、后面的脚本事件会覆盖前面的脚本事件)
<button id="btn" onclick="submit1()">提交</button>
<script>
function submit1() {
console.log('DOM click......') // 不执行
}
function submit2() {
console.log('listener click......'); // 后执行
};
document.getElementById('btn').addEventListener('click', submit2, false);
document.getElementById('btn').onclick = function() {
console.log('脚本 click......'); // 先执行
};
</script>