jQuery:触发器click()不起作用?
为什么单击trigger1
和trigger2
不会点击open
?
trigger1 trigger2 open
使用ready ( trigger3
)也不起作用:
trigger3
…
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(); }); });
重要的是澄清做jQuery('#open').click()
不执行锚标记的href属性,因此不会被重定向。 它执行#open
的onclick
事件。
你可以通过给#open
点击事件来完成重定向和使用原始jQuery('#open').click()
代码的#open
:
jQuery('#open').click( function (e) { window.location.href = this.href; });
从您的代码看起来,您希望当用户点击链接一或两个(触发器1或2)时,您希望遵循open
的链接?
如果是这种情况, .click()
实际上并不是你想要的函数,事实上jQuery似乎没有提供直接点击一个锚元素的方法。 它将做什么是触发附加到元素的任何事件。
看看这个例子:
trigger open
jQuery的:
$('#open').click(function(){ alert('I just got clicked!'); });
试试吧
因此,有一个事件附加到ID open
的元素,只是警告说它被点击了。 单击触发器链接只会触发ID open
的元素上的click事件。 所以它不会做你想要的! 它将触发任何事件,但实际上不会跟随链接
我删除了第二个触发器,因为.click()
只是.trigger('click')
的代理,所以他们做同样的事情!
因此,要触发锚点的实际点击,您将需要做更多的工作。 为了使这个可重用性稍微提高,我会稍微更改一下你的HTML (我稍后会说明原因) :
trigger google google
trigger bing bing
jQuery (最短) :
$('.trigger').click(function(e){ e.preventDefault(); window.location = $($(this).attr('rel')).attr('href'); });
试试吧
要么:
$('.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
地址 - 将Windows位置更改为新链接
尝试删除onclick="jQuery('#open').click();"
还尝试使用$('#trigger1')
你正在使用jQuery('#trigger3')
在这里JSFIDDLE 。
你是绑定事件click
#trigger3
两次 。 删除其中一个
试试这个:
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(’被解雇’); 将更改为仅文本。 这就是为什么第二个选择不起作用的原因。
根据href
内容,有3种类型的链接:
1) href
是一个url
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()
。
希望这可以帮助。 (这个插件是原型。感谢告诉我是否有错误…)