事件操作

事件绑定函数

简单的通用事件绑定函数

function bindEvent (elem, type, fn) {
  elem.addEventListener(type, fn)
}

事件冒泡

事件会从触发的元素往上级元素一层一层触发

点击"触发"弹出触发,点击"取消"弹出取消
<body>
  <div id="div1">
    <p id="p1">触发</p>
    <p id="p2">取消</p>
    <p id="p3">取消</p>
  </div>
  <div id="div2">
    <p id="p4">取消</p>
    <p id="p5">取消</p>
  </div>
</body>

var p1 = document.getElementById('p1')
var body = document.body
bindEvent(p1, 'click', function(e){
  e.stopPropagation() //阻止触发body上的"取消"事件
  alert('触发')
})
bindEvent(body, 'click', function(e){
  alert('取消')
})

事件代理

点击a标签,弹出对应a标签的内容,a标签无限多
<div id="div1">
  <a href="">a1</a>
  <a href="">a2</a>
  <a href="">a3</a>
  ...
</div>
var div1 = document.getElementById('div1')
div1.addEventListener('click', function(e){
  var target = e.target
  if(target.nodeName === 'A') {
    e.preventDefault() //阻止默认事件
    alert(target.innerHTML)
  }
})

使用代理的完善的通用事件绑定函数

增加selector参数,指定代理的选择器,上面例子中指的是a标签
function bindEvent(elem, type, selector, fn) {
  //不使用代理的情况,selector=null
  if (fn === null) {
    fn = selector
    selector = null
  }
  elem.addEventListener(type, function(e){
    var target
    if(selector){
      target = e.target
      if(target.mateches(selector)){
        fn.call(target, e)
      }
    }eles{
      fn(e)
    }
  })
}

//根据上面例子
//使用代理的情况下
var div1 = document.getElementById('div1')
bindEvent(div1, 'click', 'a', function(e){
  console.log(this.innerHTML)
})
//不使用代理的情况下
var a1 = document.getElementById('a1')
bindEvent(a1, 'click', function(e){
  console.log(a1.innerHTML)
})
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 3,558评论 1 11
  • DOM0 事件和DOM2级在事件监听使用方式上有什么区别? DOM0事件有两种写入事件 在标签内写onclick事...
    柏龙阅读 250评论 0 2
  • 1.写一个函数,批量操作 css 2.如何获取 DOM 计算后的样式 window.getComputedStyl...
    leiuno阅读 411评论 0 1
  • DOM 1级方式设置(4种) 通过onclick指定JS函数名称 在onclick中直接写入过程代码 JS中节点....
    kangyiii阅读 415评论 0 2
  • 我一直相信释迦牟尼说的一句话:“无论你遇见谁,他都是你生命该出现的人,绝非偶然,他一定会教会你一些什么”。 所以我...
    一只媛球球阅读 435评论 0 2