为什么点击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>
使用ready(trigger3
)也不起作用:
<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();
});
});
答案 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!');
});
因此,有一个事件附加到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');
});
OR:
$('.trigger').click(function(e){
e.preventDefault();
var obj = $(this).attr('rel');
var link = $(obj).attr('href');
window.location = link;
});
基本上,您想要关注其他元素的任何链接都会添加class="trigger"
,这样它就可以重复使用了。在您添加了class
的元素中,添加了rel="#element-to-be-clicked"
,这样您就可以在不同的链接上设置多次点击。
class="trigger"
rel="#element-to-be-clicked"
href
地址
答案 2 :(得分:2)
答案 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()
希望这可以帮助。
(这个插件是原型。感谢告诉我是否有错误......)