Javascript 在这个场景中,事件是如何传递的?

Javascript 在这个场景中,事件是如何传递的?,javascript,jquery,Javascript,Jquery,自学jQuery,我发现了下面的代码。我想知道事件是如何在没有创建的情况下通过匿名函数传递的 $(function() { $("#cancelForm").on("click", function(e) { e.preventDefault(); clearForm(); } }); 事件实例由jQuery在内部传递。简单地说,当他们在方法上定义他们的时,他们执行您提供的函数,在触发指定事件时将事件作为参数传递 示例代码: function

自学
jQuery
,我发现了下面的代码。我想知道事件是如何在没有创建的情况下通过匿名函数传递的

$(function() 
{
   $("#cancelForm").on("click", function(e)
    {
      e.preventDefault();
      clearForm();
    }
 });

事件实例由
jQuery
在内部传递。简单地说,当他们在方法上定义他们的
时,他们执行您提供的函数,在触发指定事件时将事件作为参数传递

示例代码:

function (a) {
    a = n.event.fix(a);
    var b, c, e, f, g, h = [],
        i = d.call(arguments),
        j = (L.get(this, "events") || {})[a.type] || [],
        k = n.event.special[a.type] || {};
    if (i[0] = a, a.delegateTarget = this, !k.preDispatch || k.preDispatch.call(this, a) !== !1) {
        h = n.event.handlers.call(this, a, j), b = 0;
        while ((f = h[b++]) && !a.isPropagationStopped()) {
            a.currentTarget = f.elem, c = 0;
            while ((g = f.handlers[c++]) && !a.isImmediatePropagationStopped()) (!a.namespace_re || a.namespace_re.test(g.namespace)) && (a.handleObj = g, a.data = g.data, e = ((n.event.special[g.origType] || {}).handle || g.handler).apply(f.elem, i), void 0 !== e && (a.result = e) === !1 && (a.preventDefault(), a.stopPropagation()))
        }
        return k.postDispatch && k.postDispatch.call(this, a), a.result
    }
}
(旨在估计如何定义
上的

/*对“on”方法的定义*/
$.fn.on=函数(事件类型,回调){
/*迭代jQuery对象的每个元素*/
for(var i=0,l=this.length;i

注意事项:

function (a) {
    a = n.event.fix(a);
    var b, c, e, f, g, h = [],
        i = d.call(arguments),
        j = (L.get(this, "events") || {})[a.type] || [],
        k = n.event.special[a.type] || {};
    if (i[0] = a, a.delegateTarget = this, !k.preDispatch || k.preDispatch.call(this, a) !== !1) {
        h = n.event.handlers.call(this, a, j), b = 0;
        while ((f = h[b++]) && !a.isPropagationStopped()) {
            a.currentTarget = f.elem, c = 0;
            while ((g = f.handlers[c++]) && !a.isImmediatePropagationStopped()) (!a.namespace_re || a.namespace_re.test(g.namespace)) && (a.handleObj = g, a.data = g.data, e = ((n.event.special[g.origType] || {}).handle || g.handler).apply(f.elem, i), void 0 !== e && (a.result = e) === !1 && (a.preventDefault(), a.stopPropagation()))
        }
        return k.postDispatch && k.postDispatch.call(this, a), a.result
    }
}
  • $.fn
    jQuery
    定义其原型方法的对象
  • 传递给
    addEventListener
    的函数中显示的
    e
    由浏览器传递

  • 事件实例由
    jQuery
    在内部传递。简单地说,当他们在
    方法上定义他们的
    时,他们执行您提供的函数,在触发指定事件时将事件作为参数传递

    示例代码:

    function (a) {
        a = n.event.fix(a);
        var b, c, e, f, g, h = [],
            i = d.call(arguments),
            j = (L.get(this, "events") || {})[a.type] || [],
            k = n.event.special[a.type] || {};
        if (i[0] = a, a.delegateTarget = this, !k.preDispatch || k.preDispatch.call(this, a) !== !1) {
            h = n.event.handlers.call(this, a, j), b = 0;
            while ((f = h[b++]) && !a.isPropagationStopped()) {
                a.currentTarget = f.elem, c = 0;
                while ((g = f.handlers[c++]) && !a.isImmediatePropagationStopped()) (!a.namespace_re || a.namespace_re.test(g.namespace)) && (a.handleObj = g, a.data = g.data, e = ((n.event.special[g.origType] || {}).handle || g.handler).apply(f.elem, i), void 0 !== e && (a.result = e) === !1 && (a.preventDefault(), a.stopPropagation()))
            }
            return k.postDispatch && k.postDispatch.call(this, a), a.result
        }
    }
    
    (旨在估计如何定义
    上的

    /*对“on”方法的定义*/
    $.fn.on=函数(事件类型,回调){
    /*迭代jQuery对象的每个元素*/
    for(var i=0,l=this.length;i

    注意事项:

    function (a) {
        a = n.event.fix(a);
        var b, c, e, f, g, h = [],
            i = d.call(arguments),
            j = (L.get(this, "events") || {})[a.type] || [],
            k = n.event.special[a.type] || {};
        if (i[0] = a, a.delegateTarget = this, !k.preDispatch || k.preDispatch.call(this, a) !== !1) {
            h = n.event.handlers.call(this, a, j), b = 0;
            while ((f = h[b++]) && !a.isPropagationStopped()) {
                a.currentTarget = f.elem, c = 0;
                while ((g = f.handlers[c++]) && !a.isImmediatePropagationStopped()) (!a.namespace_re || a.namespace_re.test(g.namespace)) && (a.handleObj = g, a.data = g.data, e = ((n.event.special[g.origType] || {}).handle || g.handler).apply(f.elem, i), void 0 !== e && (a.result = e) === !1 && (a.preventDefault(), a.stopPropagation()))
            }
            return k.postDispatch && k.postDispatch.call(this, a), a.result
        }
    }
    
  • $.fn
    jQuery
    定义其原型方法的对象
  • 传递给
    addEventListener
    的函数中显示的
    e
    由浏览器传递

  • 如注释中所述,您传递给
    on()
    As参数的函数在
    on()
    中被调用,事件对象在事件实际发生时被传递给回调函数

    简化示例:

    函数dummyOn(eventName,回调){ //做内部工作 //调用您创建的函数并将'100'传递给它 //在real on()中,当事件发生并传递事件对象时,将调用该函数 回收(100); } dummyOn(‘愚蠢事件’)函数(e){ console.log('e=',e);//100在调用回调时传递给回调的内容
    })
    如注释中所述,在
    on()
    中调用传递给
    on()的函数作为参数,事件对象在事件实际发生时传递给回调函数

    简化示例:

    函数dummyOn(eventName,回调){ //做内部工作 //调用您创建的函数并将'100'传递给它 //在real on()中,当事件发生并传递事件对象时,将调用该函数 回收(100); } dummyOn(‘愚蠢事件’)函数(e){ console.log('e=',e);//100在调用回调时传递给回调的内容 })
    jQuery的事件系统根据W3C标准规范化事件对象。事件对象保证传递给事件处理程序(不需要检查window.event)。它规范化了target、relatedTarget、metaKey和pageX/Y属性,并提供了
    stopPropagation()
    preventDefault()
    方法

    这些属性都记录在页面上,并附有示例

    文档对象模型中的标准事件有:模糊、聚焦、加载、调整大小、滚动、卸载、卸载前、
    单击、
    dblclick
    mousedown
    mouseup
    mousemove
    mouseover
    mouseout
    mouseententer
    mouseleave
    更改
    选择
    提交
    按键
    按键
    ,以及
    按键
    。由于DOM事件名称对于某些元素具有预定义的含义,因此不建议将其用于其他目的。jQuery的事件模型可以通过元素上的任何名称触发事件,并将其传播到该元素所属的DOM树(如果有的话)

    您可以通过Jquery调用以下
    console.log(arguments.callee.caller.toString())来检查调用方函数
    中单击事件

    该日志打印以下内容:

    function (a) {
        a = n.event.fix(a);
        var b, c, e, f, g, h = [],
            i = d.call(arguments),
            j = (L.get(this, "events") || {})[a.type] || [],
            k = n.event.special[a.type] || {};
        if (i[0] = a, a.delegateTarget = this, !k.preDispatch || k.preDispatch.call(this, a) !== !1) {
            h = n.event.handlers.call(this, a, j), b = 0;
            while ((f = h[b++]) && !a.isPropagationStopped()) {
                a.currentTarget = f.elem, c = 0;
                while ((g = f.handlers[c++]) && !a.isImmediatePropagationStopped()) (!a.namespace_re || a.namespace_re.test(g.namespace)) && (a.handleObj = g, a.data = g.data, e = ((n.event.special[g.origType] || {}).handle || g.handler).apply(f.elem, i), void 0 !== e && (a.result = e) === !1 && (a.preventDefault(), a.stopPropagation()))
            }
            return k.postDispatch && k.postDispatch.call(this, a), a.result
        }
    }
    
    因此,基本上,JQuery注入事件对象,为逻辑应用必要的数据

    var clearForm=function(){
    控制台日志(“清除”);
    };
    $(函数(){
    $(“#取消表单”)。在(“单击”上,函数(e){
    log(arguments.callee.caller.toString());
    e、 预防默认值();
    clearForm();
    });
    });
    
    
    取消!
    
    jQuery的事件系统根据W3C标准规范化事件对象。事件对象保证传递给事件处理程序(不需要检查window.event)。它规范化了target、relatedTarget、metaKey和pageX/Y属性,并提供了
    stopPropagation()
    preventDefault()
    方法

    这些属性都记录在页面上,并附有示例

    文档对象模型中的标准事件有:模糊、聚焦、加载、调整大小、滚动、卸载、卸载前、
    单击、
    dblclick
    mousedown
    mouseup
    mousemove