参考

DOM0事件绑定

  1. <button>点击</button>
  2. const btn = document.querySelector('button')
  3. btn.onclick = function(){
  4. const bgColor = '#000000';
  5. document.body.style.backgroundColor = bgColor;
  6. }
  7. //下面写法同义
  8. function bgChange(){
  9. const bgColor = '#000000';
  10. document.body.style.backgroundColor = bgColor;
  11. }
  12. btn.onclick = bgChange

DOM2事件绑定

addEventListener
btn.addEventListener(eventType, function () {}, false);
三个参数:事件名click,处理程序,布尔值(true为事件捕获阶段调用处理程序,false为事件冒泡阶段处理程序)

  1. <button>点击</button>
  2. const btn = document.querySelector('button')
  3. function bgChange(){
  4. const bgColor = '#000';
  5. doucument.body.style.backgroundColor = bgColor;
  6. }
  7. btn.addEventListener('click',bgChange)
  8. //下面写法同义
  9. btn.addEventListener('click', function(){
  10. const bgColor = '#000';
  11. doucument.body.style.backgroundColor = bgColor;
  12. })

removeEventListener

  1. btn.removeEventListener('click',bgChange)

添加多个事件时,要采用DOM2事件绑定

  1. btn.onclick = functionA
  2. btn.onclick = functionB
  3. functionB会覆盖functionA
  4. btn.addEventListener('click',functionA)
  5. btn.addEventListener('click',functionB)
  6. 此时fanctionBFunctionA都是生效的

切记:上述两种方法都不可以,在方法名后加(),类似这种 btn.onclick = functionA() ❌,错误的写法,函数在渲染的时候直接执行掉了,点击的时候不再生效了。所以也就无法用这种方式传参数。
以下方法可以参考作为参数传递
image.png

行内事件处理

  1. <button onclick="bgChange()">点击</button>
  2. function bgChange(){
  3. const bgColor = '#000000';
  4. doucumnet.body.style.backgroundColor = bgColor;
  5. }
  6. //这种也支持
  7. <button onclick = "alert('hello')">点击<button>

不建议使用:

  1. html和js不要混在一起
  2. 多个btn添加事件时,增加工作量
    1. //这种是支持的
    2. const btns = document.querySelectorAll('button');
    3. for(let i = 0; i< btns.length; i++){
    4. btns[i].onclick = bgChange
    5. }