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

时间:2013-12-26 09:44:04

标签: javascript jquery

最近我发现当我点击其他元素时,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,它似乎在类名上有错误。

5 个答案:

答案 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')