今天写脚本的时候发现$('#demo').click()并不能触发点击事件。经过一番搜索知道改成$('#demo')[0].click()就可以了,意思是用dom的click方法就可以模拟点击事件。

可以确定的是通过js原生的addEventListener方法添加的事件监听器jquery并不能获取到,而通过jquery提供的on方法jquery是可以获得该handler的reference的,那么就可以确定,如果通过addEventListener方法添加的handler被触发了,一定是jquery调用了js的方法 。 

经过测试,大部分标签例如div等等,如果是用addEventListener方法添加的handler也能被触发,那么我之前写的,jquery模拟点击为什么有时候还是会不起作用呢,既然jquery的click方法本质上还是调用了js原生的click方法,按理来说并不存在文章标题所说的问题。

通过打断点的方式,定位到了这里,可以看到jquery对于a标签,为了不同浏览器能表现出一样的行为,不会对a标签使用js原生的click方法,只是调用了jquery的click方法,这也就导致对于a标签,只能触发onclick绑定的handler以及通过on方法注册的handler,因为jquery提供的click方法只能拿到这些handler的reference 。