Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么jQuery不能触发锚标记上的本机单击?_Javascript_Jquery - Fatal编程技术网

Javascript 为什么jQuery不能触发锚标记上的本机单击?

Javascript 为什么jQuery不能触发锚标记上的本机单击?,javascript,jquery,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> 这是我的答案。单击第一个链接不会触发对第二个链接

最近,我发现当我单击其他元素时,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>
这是我的答案。单击第一个链接不会触发对第二个链接的本机单击

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

解决方案 使用本机DOM元素

$('.js-a1').click(function () {
  $('.js-a2').get(0).click();
  return false;
});
这是我的答案

解释 我在Learn jQuery上找到一篇帖子:。它告诉我:

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

问题: 所以我的问题来了:

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

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

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

我想你忘记阅读文档了

文件说:

// 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;
});
要触发点击事件,您还可以使用
.trigger('click')
更好的方法

事件处理程序的使用方式如下:

$(document).on('click', '.js-a1',function(){//code in here});
// here now .js-a1 is event handler
您必须使用
$(“选择器”).trigger('click')

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

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

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

.trigger()

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


检查,单击两个链接查看差异。希望有帮助。

老问题,但这里有一个漂亮而简单的解决方案: 通过将DOM元素的OneEvent处理程序指定为本机事件,基本上可以使用jQuery“注册”本机JS事件。理想情况下,我们会先检查以确保尚未设置OneEvent处理程序。
例如,“注册”本机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;
}

这里有一个小问题:

你试过event.preventDefault()?@TejasvaDhyani是的,
返回false;
在jQuery中将同时执行
e.preventDefault();
e.stopPropagation();
。触发器(“点击”)与
相同。点击()
。同意@cookiemonster和
$(.js-a2')。获取(0)
将获得一个DOM元素。另外:
return false
在jQuery处理程序中同时执行
e.preventDefault
e.stoppropagation
,因此其中一个在您的答案中是多余的。
.trigger(“click”)
相同。click()
。什么文档?是这样说的。但这只是另一个解决方案。
$('.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;
}