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

时间:2011-04-07 07:38:53

标签: jquery

为什么点击trigger1trigger2不会点击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>

使用readytrigger3)也不起作用:

<a id="trigger3" href="#">trigger3</a>

...

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();
  });
});

6 个答案:

答案 0 :(得分:22)

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

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

#open

答案 1 :(得分:7)

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

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

看一下这个例子:

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

jQuery的:

$('#open').click(function(){
    alert('I just got clicked!'); 
});

Try it here

因此,有一个事件附加到ID为open的元素,只是警告它说它被点击了。单击触发器链接只会触发ID为open的元素上的click事件。所以它不会做你想要的! 它会触发任何事件,但它实际上不会跟随链接 我删除了第二个触发器,因为.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>

jQuery (最短)

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

Try it here

OR:

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

Try it here

基本上,您想要关注其他元素的任何链接都会添加class="trigger",这样它就可以重复使用了。在您添加了class的元素中,添加了rel="#element-to-be-clicked",这样您就可以在不同的链接上设置多次点击。

  • 因此,您现在可以使用class="trigger"
  • 捕获元素上的所有点击
  • rel="#element-to-be-clicked"
  • 上找到您想要点击的元素
  • 从元素
  • 获取href地址
  • 将窗口位置更改为新链接

答案 2 :(得分:2)

尝试删除onclick="jQuery('#open').click();"

还尝试使用$('#trigger1')

放置jQuery('#trigger3')

JSFIDDLE here

答案 3 :(得分:2)

您将事件click绑定到#trigger3 两次。删除其中一个

答案 4 :(得分:1)

试试这个:

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

  jQuery('#trigger3').click(function(){
      jQuery('#open').text('to be fired'); /* works */
      jQuery('#open').click();
  });
});

jQuery('#open')。html('被解雇');将更改为仅文本。这就是第二个选择不起作用的原因。

答案 5 :(得分:0)

根据href内容,有3种类型的链接:

1)href是网址 2)href是一个javascript调用,如“javascript:”
3)href无用(“#”,“javascript:void(0)”,...),该函数直接绑定在链接上

这就是我制作这个小插件来调用好方法的原因:

(function( $ ){
  $.fn.triggerClick = function() {
      var href = $(this).attr('href');
      //No useful link into href, try to call js click
      if(href.indexOf('#') == 0 || href.indexOf('javascript:void(') == 0 || href == '') {
         $(this).click();
      //JS call
      } else if(href.indexOf('javascript:') == 0) {
         eval(href);
      //URL
      } else {
         document.location.href = href;
      }
    };
  })( jQuery );

要拨打电话,只需使用$('DOMelement').triggerClick() 希望这可以帮助。 (这个插件是原型。感谢告诉我是否有错误......)