2014-12-19 17 views
3

我发布这个,因为我在其他地方找不到相同的问题。为什么我不能用JS触发另一个锚上的默认href?

我试图触发锚点的默认动作,但在另一个锚点的点击处理程序中调用.click()或.trigger('click')。

像这样:

HTML:

<!-- I want to simulate a user clicking link2 when the user actually clicks link 1. --> 
<!-- My guess is that triggering click just triggers any JS-bound click handlers. But that would defeat the point of e.preventDefault() when you usually have to call this to stop the default href being followed --> 
<a id="link1" href="#">Click</a> 
<a id="link2" target="_blank" href="http://google.com">Link 2</a> 

JS:

$(document).ready(function(){ 
     $('#link1').on('click', function(){ 
       $('#link2').click(); 
       $('#link2').trigger('click'); // Neither work 
     }); 
    }); 

我觉得像这样的小白,但什么也没发生的点击。这是否因安全性或可访问性而被阻止?

我不想使用window.open();

小提琴:http://jsfiddle.net/0hggdkzb/

+0

这些链接指向不同的页面吗? – 2014-12-19 06:37:26

+0

它实际上工作。检查出http://jsfiddle.net/0hggdkzb/11/ – 2014-12-19 06:40:16

+0

[jQuery:trigger click()不可用的重复[]](http:// stackoverflow。com/questions/5577555/jquery-trigger-click-doesnt-work) – 2014-12-19 06:40:55

回答

4

尝试

jQuery(document).ready(function(){ 
    $('#link1').on('click', function(){ 
     // $('#link2').click().css('color','red'); 
     document.getElementById("link2").click(); 
    }); 
}); 

DEMO

或者

你可以触发事件$('#link2')[0].click();

+0

我想通过触发jQuery点击事件的最后处理程序将是浏览器的默认操作。您的解决方案可以正常工作,但直接触发DOM元素的点击。为什么? – 2014-12-19 13:18:11

+0

为什么使用jQuery的一些,但不是其他? – alex 2014-12-22 05:42:07

1

Triggering-event-handlers清除有关此,

.trigger()功能不能被用于模拟本机浏览器事件, 如点击文件输入框或一个锚定标记。这是 ,因为没有使用与这些事件相对应的jQuery事件 系统附加事件处理程序。

jQuery UI团队创建了jquery.simulate.js以便简化 触发本机浏览器事件以用于其自动测试。 其使用模仿jQuery的触发器。

$("a").simulate("click"); 

而对于你的问题,你必须为@Bala回答喜欢使用JavaScript核心事件,

$(function(){ 
    $('#link1').click(function(){ 
     $('#link2')[0].click(); 
    }); 
}); 

或使用location.href一样,

$(function(){ 
    $('#link1').click(function(){ 
     window.location = $('#link2').attr('href'); 
    }); 
}); 

而且,Hoffman给同一问题的答案

0

Tr y这:

$(document).ready(function() 
{ 
    $("#link1").click(function() 
    { 
     $('#link2')[0].click(); 
    }); 
}); 
+0

这不是我所问的。 – 2014-12-19 13:14:55

相关问题