为什么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')