如何使用jQuery触发链接上的单击

Pat*_*cow 220 jquery triggers click

我有一个链接:

<ul id="titleee" class="gallery">
  <li>
    <a href="#inline" rel="prettyPhoto">Talent</a>
  </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

我试图通过使用以下方法触发它:

$(document).ready(function() {
  $('#titleee').find('a').trigger('click');
});
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

我也尝试过: $('#titleee a').trigger('click');

编辑:

我实际上需要触发这里调用的任何东西 <a href="#inline" rel="prettyPhoto">

Kit*_*nde 276

如果你试图在锚点上触发事件,那么你所拥有的代码将会工作我在jsfiddle中使用添加的eventHandler 重新创建你的例子,这样你就可以看到它的工作原理:

$(document).on("click", "a", function(){
    $(this).text("It works!");
});

$(document).ready(function(){
    $("a").trigger("click");
});
Run Code Online (Sandbox Code Playgroud)

您是否尝试通过单击锚点导致用户导航到网页上的某个点,或者您是否尝试触发绑定到它的事件?也许您实际上没有将click事件成功绑定到事件中?

这个:

$('#titleee').find('a').trigger('click');
Run Code Online (Sandbox Code Playgroud)

相当于:

$('#titleee a').trigger('click');
Run Code Online (Sandbox Code Playgroud)

无需致电查找.:)

  • @Kit .find()是一个比你提议的更快的选择器,如果你不同意但是你的提议会减慢它,那就做一个基准测试.肯定的:-) (16认同)
  • @mashappslabs - 没关系.如果您觉得需要进行过早和微观的优化,无论多么真实,我都很高兴.:) (12认同)
  • 奇怪的是,上述内容对我不起作用,但@GrahamHotchkiss回答了. (7认同)
  • @Kit ...所以当你发表诸如"不需要调用查找"这样的陈述时,它不会落入过早优化的境界?我认为确实如此,但它恰好比最初提出的要慢.我不是为了争论而做出回应,而是为了共同努力,以便在我们所有人喜欢做的事情上做得更好.我希望这是正确的:-) (4认同)
  • @mashappslabs - 我第一次见过jsperf.com,我以为我会回来说你是对的,一般情况下你的方法更快.只有Opera比较慢.http://jsperf.com/jquery-selector-perf-right-to-left/32 (4认同)

Gra*_*iss 193

对不起,但实际上并不需要事件处理程序.您需要的是标签中要点击的另一个元素.

<a id="test1" href="javascript:alert('test1')">TEST1</a>
<a id="test2" href="javascript:alert('test2')"><span>TEST2</span></a>
Run Code Online (Sandbox Code Playgroud)

jQuery的:

$('#test1').trigger('click'); // Nothing
$('#test2').find('span').trigger('click'); // Works
$('#test2 span').trigger('click'); // Also Works
Run Code Online (Sandbox Code Playgroud)

这就是你点击的内容,它不是标签,而是标签内的东西.不幸的是,JQuery似乎没有识别裸文本,但它是通过vanilla javascript:

document.getElementById('test1').click(); // Works!
Run Code Online (Sandbox Code Playgroud)

或者通过将jQuery对象作为数组访问

$('#test1')[0].click(); // Works too!!!
Run Code Online (Sandbox Code Playgroud)

  • `$('#titleee a')[0] .click();`做的诀窍! (47认同)
  • $('selector')[0] .click()实际上会处理至少一个触发事件处理程序的情况:让浏览器将其识别为触发协议处理程序链接的实际点击.在click事件上调用触发器不会导致关联的应用程序启动.谢谢你把它包括在你的答案中! (7认同)
  • $( '#TEST1')[0].点击(); 工作良好 (6认同)
  • 是的,`.click()`正是我所需要的! (3认同)
  • $('#test2 span').触发器('click'); 帮助,因为它可以在新标签中打开一个网址,但$('#test1')[0] .click(); 正在打开一个弹出的instea. (3认同)
  • $('#test1')[0].click(); 是一个救世主。多谢 (3认同)

Ale*_*lex 13

由于此问题在“触发对<a>元素的点击”方面在Google中排名第一,实际上没有答案提及您的操作方式,因此,您可以这样做:

$('#titleee a')[0].click();
Run Code Online (Sandbox Code Playgroud)

说明:您click在基础html元素上触发,而不是jQuery-object触发。

不客气的Google员工:)

  • “您触发了对底层html元素而不是jQuery对象的单击。” -为我*点击*,谢谢! (2认同)

Ady*_*gom 6

那么你必须先设置点击事件然后你可以触发它并看看会发生什么:

//good habits first let's cache our selector
var $myLink = $('#titleee').find('a');
$myLink.click(function (evt) {
  evt.preventDefault();
  alert($(this).attr('href'));
});

// now the manual trigger
$myLink.trigger('click');
Run Code Online (Sandbox Code Playgroud)


Jul*_*ulz 5

使用您提供的代码,您不能指望发生任何事情.我第二个@mashappslabs:首先添加一个事件处理程序:

$("selector").click(function() {
    console.log("element was clicked"); // or alert("click");
});
Run Code Online (Sandbox Code Playgroud)

然后触发你的活动:

$("selector").click(); //or
$("selector").trigger("click");
Run Code Online (Sandbox Code Playgroud)

你应该在控制台中看到这条消息.

  • 这对我不起作用:如果selector是"a"(链接的HTML标记,只是为了清楚),当我调用`trigger`时会调用匿名函数,但标签的动作不会发生.这就像事件不会传播到关联的DOM元素.@GrahamHotchkiss的答案是唯一一个对我有效的答案. (5认同)

Ana*_*Pal 5

如果您尝试在锚点上触发事件,那么您拥有的代码将起作用.

$(document).ready(function() {
  $('a#titleee').trigger('click');
});
Run Code Online (Sandbox Code Playgroud)

要么

$(document).ready(function() {
  $('#titleee li a[href="#inline"]').click();
});
Run Code Online (Sandbox Code Playgroud)

要么

$(document).ready(function() {
  $('ul#titleee li a[href="#inline"]').click();
});
Run Code Online (Sandbox Code Playgroud)