Ant*_*ton 5 javascript jquery events
这个问题只是出于好奇.我想知道jquery的.click()是如何在幕后工作的.
例如,如果我创建一个按钮:
<input type="button" id="myButton" value="Click me!" />
Run Code Online (Sandbox Code Playgroud)
然后我有以下jquery代码:
$('#myButton').click( function() {
alert("I have been clicked.");
});
Run Code Online (Sandbox Code Playgroud)
jquery如何使它在单击按钮时调用我的函数?
起初我以为它会将onClick=""属性添加到按钮的标签中,但是当我用Firebug检查页面时,我刚刚看到:
<input type="button" id="myButton" value="Click me!" />
Run Code Online (Sandbox Code Playgroud)
那么jquery在幕后做什么呢?
这将取决于浏览器。
如果您使用的浏览器支持addEventListener(),他们会使用它添加一个处理程序。
尽管我很确定他们实际上附加了一个函数,该函数首先修复/规范化event对象,然后检查属性的 DOM 元素jQuery12345...并查找处理程序jQuery.cache并调用它。
如果将元素记录到控制台,您将看到一个类似于以下内容的属性:
jQuery1296081364954: 1
Run Code Online (Sandbox Code Playgroud)
然后,如果您从 将该号码记录到控制台jQuery.cache,您将看到关联的数据。
console.log(jQuery.cache[1]);
Run Code Online (Sandbox Code Playgroud)
...这将给出这样的结构:
{
events:{
click:[
{ /* object containing data relevant to the first click handler */ }
]
},
handle:{ /* this may be what initially gets called. Not sure. */ }
}
Run Code Online (Sandbox Code Playgroud)
因为 jQuery 确实规范了事件对象,所以它并不像为您分配一个处理程序并调用它那么简单。我相信它也是通过缓存完成的,以避免旧浏览器中的内存泄漏。
| 归档时间: |
|
| 查看次数: |
2320 次 |
| 最近记录: |