为什么jQuery无法触发锚标记的本机点击?

最近我发现当我点击其他元素时,jQuery无法触发锚标记上的本机点击事件,下面的示例将无效:

HTML

this is a link this is another link 

JavaScript的

 $('.js-a1').click(function () { $('.js-a2').click(); return false; }); 

这里是jsfiddle – 1 。 单击第一个链接将不会触发第二个链接上的本机单击。

经过一些搜索,我找到了解决方案和解释。

使用本机DOM元素。

 $('.js-a1').click(function () { $('.js-a2').get(0).click(); return false; }); 

这是jsfiddle – 2 。

说明

我在Learn jQuery : Triggering Event Handlers上找到了一篇文章。 它告诉我:

.trigger()函数不能用于模仿本机浏览器事件,例如单击文件输入框或锚标记。 这是因为,没有使用与这些事件对应的jQuery事件系统附加事件处理程序。

所以这是我的问题:

如何理解‘没有使用与这些事件相对应的jQuery事件系统附加事件处理程序’

为什么没有这样的相应事件处理程序?

编辑

我更新了我的jsfiddles,似乎有类名的错误。

没有使用与这些事件对应的jQuery事件系统附加事件处理程序

这意味着,在学习材料的这一点上,没有使用.click(function() {}.bind('click', function () {})等将jQuery事件处理程序附加到这些元素。

无参数.click()用于从jQuery的角度触发( .trigger('click') )一个“click”事件,它将执行jQuery使用.click.bind ,…执行的所有“click”事件处理程序.on等等。此伪事件不会发送到浏览器。

。触发()

执行附加到给定事件类型的匹配元素的所有处理程序和行为。

检查更新的jsFiddle示例 ,单击两个链接以查看差异。 希望能帮助到你。

我想你忘了阅读文档。

文件说:

 // Triggering a native browser event using the simulate plugin $( ".js-a2" ).simulate( "click" ); 

首先,您需要阻止链接的默认行为

 $('.js-a1').click(function (e) { e.preventDefault(); $('.js-a2').get(0).click(); return false; }); 

要触发click事件,您还可以使用.trigger('click')更好的方法

事件处理程序使用如下:

 $(document).on('click', '.js-a1',function(){//code in here}); // here now .js-a1 is event handler 

老问题,但这是一个非常简单的解决方案:通过将DOM元素的onEvent处理程序指定为本机事件,您基本上可以使用jQuery“注册”本机JS事件。 理想情况下,我们首先检查以确保尚未设置onEvent处理程序。
例如,’注册’本机JS click事件,因此它将由jQuery触发:

 $('.js-a1').click(function (e) { $('.js-a2').click(); e.preventDefault(); }); var trigger_element = $('.js-a2')[0]; // native DOM element if (!trigger_element.onclick) { trigger_element.onclick = trigger_element.click; } 

这是一个小提琴: http : //jsfiddle.net/f9vkd/162/

你必须使用$("selector").trigger('click')