.click()使用document.getElementById,但不使用jquery选择器

时间:2016-04-27 14:01:32

标签: javascript jquery click

这有效:

$(function() {
    document.getElementById('click').click();
});

这不是:

$(function() {
    $('#click').click();
});

为什么?

编辑:(为了完整起见;已经达成答案):

$(function() {
    $('#click').trigger('click')
});

也失败了

2 个答案:

答案 0 :(得分:4)

  

为什么?

因为jquery click方法接受将在点击时调用的处理程序。

但是,DOM click方法模拟了click方法本身。

你需要

$('#click')[0].click();

或触发它

$('#click').trigger('click')
$('#click').click(); 

最后两个仅在分配了事件处理程序时才有效。也就是说,它不会触发简单anchor点击,但会调用onclick事件。

以下是JS Fiddle

<强>样本

&#13;
&#13;
function f1()
{
   document.getElementById("link1").click();
   document.getElementById("link2").click();
}

function f2()
{
   $("#link1").click();
   $("#link2").click();
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="javascript:alert(1)" id="link1">Link 1 </a>
<a onclick="alert(2)" id="link2">Link 2 </a>

<button onclick="f1();">DOM click</button>

<button onclick="f2();">Jquery Click</button>
&#13;
&#13;
&#13;

答案 1 :(得分:2)

更好的问题是,为什么你认为它应该有用?

两段完全不同的代码,为什么它们的工作原理相同?

具体来说,在第一种情况下,您有一个某种类型的HTML元素,并且您正在调用其本机.click()方法,该方法会触发单击它(通常用于链接或按钮)

另一方面,第二个获取jQuery集合,包含单个元素(如果不存在则不包含任何元素)。对于jQuery集合,调用.click()会将事件处理程序附加到集合中所有元素的click事件。

因此...

一方面,您调用触发点击的功能 另一方面,您调用一个函数将事件处理程序绑定到集合中所有元素的click事件。

为什么你认为应该有效?