在有的网站直接用jQuery在命令行选中一个元素,比如一个可以点击的登录按钮之类的,运行
$(selector).eq(n).click();
发现不起作用,有的网站则可以起作用。
我本来以为是在点击的时候同事判断鼠标是不是在这个元素上面,后来发现似乎不是这样做的。
然后我发现把之前的触发方式变成
$(selector)[n].click();
也就是换成原生的click方法就可以触发了。
我就猜测是不是那些网站对jQuery的click做了处理呢?
有没有办法判断是真实的点击还是JavaScript触发的点击?
=_=! 从问题上来看你已经钻牛角尖钻到一个相当蹩脚的地方去了,那么问题来了,你蛋疼么...
好吧,不开玩笑说正经的啦。jQuery 的
.click()
别看它叫点击,可是它干的不纯粹是点击的事情。要了解这个我们还是得老老实实的翻文档,那么文档上是这么说的:.click()
函数有无参,一个参数和两个参数三种情况。文章中明确指出了,一参和两参的情况下就相当于.on("click", fn)
的简写。也就是说,其实 jQuery 干的只是为元素绑定了一个点击事件,并触发这个点击事件而已。而无参的情况下就相当于.trigger("click")
,也就是说直接触发点击事件。所以, jQuery 的.click()
都是围绕着事件来的。那么当元素没有定义事件呢?抱歉,jQuery 的.click()
罢工了。文字上可能不太好明白,但是来个例子对比一下你就能懂了:http://jsfiddle.net/gp1qu8co/ 。 这个例子的结果是通过事件绑定的
alert
弹出来了,但是链接却没有跳转。那到底为啥默认事件没有触发,而用户自定义的事件触发了呢?让我们继续来看一个例子:http://jsfiddle.net/gp1qu8co/1/ 。测试发现通过原生的.addEventListener()
注册的事件也不能被触发。啊咧还有这种区别么?前面说过了,无参的情况就是.trigger("click")
的简写,所以为了搞明白这个问题,我又去看了.trigger()
的文档,文档中是这么说的:原来
.trigger()
只会触发通过.on()
和其方法的简写(比如 jQuery 的.click()
)绑定的事件啊!所以我们明白了,原来 jQuery 的.click()
只是 jQuery 的,并不是大家的啊。以上千言万语就是一句话,触发点击事件的话还是用原生
.click()
的好,原生也很美!