jQuery:触发器click()不起作用?

mar*_*osh 9 jquery

为什么单击trigger1并且trigger2不点击open

<a id="trigger1" href="#" onclick="jQuery('#open').trigger('click');">trigger1</a>  
<a id="trigger2" href="#" onclick="jQuery('#open').click();">trigger2</a>
<a id="open" href="http://google.com">open</a>
Run Code Online (Sandbox Code Playgroud)

使用ready(trigger3)也不起作用:

<a id="trigger3" href="#">trigger3</a>
Run Code Online (Sandbox Code Playgroud)

...

jQuery(document).ready(function(){    
  jQuery('#trigger3').bind('click', function(){
      jQuery('#open').html('to be fired'); /* works */
      jQuery('#open').click();        
  });

  jQuery('#trigger3').click(function(){
      jQuery('#open').html('to be fired'); /* works */
      jQuery('#open').click();
  });
});
Run Code Online (Sandbox Code Playgroud)

Jak*_*ake 22

重要的是要澄清,do jQuery('#open').click()不会执行锚标记的href属性,因此您不会被重定向.它执行未定义的onclick事件#open.

您可以jQuery('#open').click()通过发出#open单击事件来完成重定向以及使用原始代码进行重定向的能力:

jQuery('#open').click( function (e) {
  window.location.href = this.href;
});
Run Code Online (Sandbox Code Playgroud)


Sco*_*ler 7

从您的代码看起来,您希望当用户点击链接一或两个(触发器1或2)时,您希望open遵循链接?

如果是这种情况,.click()实际上并不是你想要的功能,事实上jQuery似乎没有提供直接点击一个锚元素的方法.它将做什么是触发附加到元素的任何事件.

看看这个例子:

<a id="trigger" href="#" onclick="$('#open').click();">trigger</a>
<a id="open" href="http://google.com">open</a>
Run Code Online (Sandbox Code Playgroud)

jQuery的:

$('#open').click(function(){
    alert('I just got clicked!'); 
});
Run Code Online (Sandbox Code Playgroud)

在这里试试吧

因此,有一个事件附加到具有ID的元素,open它只是警告说它被点击了.单击触发器链接只会触发具有ID的元素上的click事件open.所以它不会做你想要的!它将触发任何事件,但它实际上不会跟随我删除第二个触发器的链接,
因为.click()它只是一个代理,.trigger('click')所以他们做同样的事情!

因此,要触发锚点的实际点击,您将需要做更多的工作.为了使这个可重用性稍微提高,我会稍微改变你的HTML (稍后我会说明原因):

<a href="#" class="trigger" rel="#open">trigger google</a>
<a id="open" href="http://google.com">google</a>
<br/><br/>
<a href="#" class="trigger" rel="#bing">trigger bing</a>
<a id="bing" href="http://bing.com">bing</a>
Run Code Online (Sandbox Code Playgroud)

jQuery (最短):

$('.trigger').click(function(e){
    e.preventDefault();
    window.location = $($(this).attr('rel')).attr('href');
});
Run Code Online (Sandbox Code Playgroud)

在这里试试吧

要么:

$('.trigger').click(function(e){
    e.preventDefault();
    var obj = $(this).attr('rel');
    var link = $(obj).attr('href');
    window.location = link;
});
Run Code Online (Sandbox Code Playgroud)

在这里试试吧

基本上任何你想要跟随另一个元素的链接都添加class="trigger"到了,这样它就可以重用了.在您添加了classto 的元素中,添加rel="#element-to-be-clicked"此元素可以让您在不同的链接上设置多次点击.

  • 因此,您现在可以捕获对元素的任何点击 class="trigger"
  • 找到您想要点击的元素 rel="#element-to-be-clicked"
  • href从元素中获取地址
  • 将Windows位置更改为新链接