jQuery源码分析之Event事件分析(5)


  handle : function(event) {
    // 返回 undefined or false
    var val, ret, namespace, all, handlers;
    //修改了传入的参数,这里是引用。
    event = arguments[0] = jQuery.event.fix(event || window.event);
    // 命名空间处理
     namespace = event.type.split(".");
    event.type = namespace[0];
     namespace = namespace[1];
    // all = true 表明任何 handler,namespace不存在,同时
    //event.exclusive不存在或为假时,all=true.
    all = !namespace && !event.exclusive;
    // 找到元素的events中缓存的事件名的处理函数列表
    handlers = (jQuery.data(this, "events") || {})[event.type];
    for (var j in handlers) {// 每个处理函数执行
       var handler = handlers[j];
      // Filter the functions by class
       if (all || handler.type == namespace) {
       // 传入引用,为了之后删除它们
        event.handler = handler;
       event.data = handler.data;//add的时候加上的
       ret = handler.apply(this, arguments);// 执行事件处理函数
        if (val !== false)
         val = ret;// 只要有一个处理函数返回false,本函数就返回false.
       if (ret === false) {// 不执行浏览器默认的动作
         event.preventDefault();
          event.stopPropagation();
       }
      }
    }
    return val;  }

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wdxxjp.html