最近我发现当我点击其他元素时,jQuery无法触发锚标记上的本机点击事件,下面的示例将无效:
HTML
<a class="js-a1" href="new.html" target="_blank">this is a link</a>
<a class="js-a2" href="another.html" target="_blank">this is another link</a>
的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,它似乎在类名上有错误。
答案 0 :(得分:3)
没有使用与这些事件对应的jQuery事件系统附加事件处理程序
这意味着,在学习资料的这一点上,没有jQuery事件处理程序使用.click(function() {}
或.bind('click', function () {})
等附加到这些元素。
无参数.click()
用于从jQuery的角度触发(.trigger('click')
)一个“click”事件,它将使用.click
执行jQuery注册的所有“click”事件处理程序,.bind
,.on
等。此伪事件不会发送到浏览器。
<强> .trigger()强>
执行附加到给定事件类型的匹配元素的所有处理程序和行为。
检查updated jsFiddle example,点击两个链接查看差异。希望它有所帮助。
答案 1 :(得分:0)
我想你忘了阅读文档。
文件说:
// Triggering a native browser event using the simulate plugin
$( ".js-a2" ).simulate( "click" );
答案 2 :(得分:0)
首先,您需要阻止链接
的默认行为$('.js-a1').click(function (e) {
e.preventDefault();
$('.js-a2').get(0).click();
return false;
});
要触发点击事件,您还可以使用.trigger('click')
更好的方式
事件处理程序的使用方式如下:
$(document).on('click', '.js-a1',function(){//code in here});
// here now .js-a1 is event handler
答案 3 :(得分:0)
老问题,但这里有一个漂亮而简单的解决方案: 通过将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/
答案 4 :(得分:-3)
您必须使用$("selector").trigger('click')