请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

请问为什么不代理的时候会报错?

<!DOCTYPE html>
<html>
<head>
  <title></title>
  <meta charset="utf-8">
</head>
<body>
    <div id="div1">
      <a href="http://imooc.com" id="link1">imooc</a>
      <a href="http://imooc.com" id="link2">imooc</a>
      <p>imooc</p>
      <a href="http://imooc.com" id="link3">imooc</a>
      <a href="http://imooc.com" id="link4">imooc</a>
      <p id="p1">激活</p>
      <p id="p2">取消</p>
    </div>
    <div id="div2">
        <p id="p3">取消</p>
        <p id="p4">取消</p>
    </div>

    <script type="text/javascript">

      function bindEvent(elem, type, selector, fn){
        if (fn === null) {
          fn = selector
          selector =null
        }
        elem.addEventListener(type, function(e){
          var target
          if (selector) {
            // 代理
            target = e.target
            // console.log(target)
            if (target.matches(selector)) {
              fn.call(target, e)
            }
          } else {
            //不是代理
            fn(e)
          }
        })
      }


      var div1 = document.getElementById('div1')
      bindEvent(div1, 'click', 'a', function(e){
        e.preventDefault()
        console.log(this.innerHTML)
      })

      
      var p1 = document.getElementById('p1')
      bindEvent(p1, 'click', function(e){
        console.log(p1.innerHTML)
      })

    </script>
</body>
</html>

SyntaxError: 'function(e){ console.log(p1.innerHTML) }' is not a valid selector

正在回答

1回答

你忽略了一个细节。将 if (fn === null) { 改为 if (fn == null) { 试试。=== 和 == 在这里使用一定要注意。

0 回复 有任何疑惑可以回复我~
  • 提问者 最和缓的阳光 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2018-03-27 10:44:16
  • 提问者 最和缓的阳光 #2
    我发现也可以不改为 === 而把null 改为 undefined
    就是说没有fn的时候其类型就是undefined
    回复 有任何疑惑可以回复我~ 2018-03-27 11:12:20
  • 双越 回复 提问者 最和缓的阳光 #3
    是的!
    回复 有任何疑惑可以回复我~ 2018-03-27 11:21:01
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号