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