为什么我不能用JS触发另一个锚点上的默认href?

时间:2014-12-19 06:31:26

标签: javascript jquery html

我发布此信息是因为我无法在其他地方找到相同的问题。

我试图触发锚点的默认操作但是在另一个锚点击处理程序中调用.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/

3 个答案:

答案 0 :(得分:4)

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

<强> DEMO

或者

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

答案 1 :(得分:1)

Triggering-event-handlers清除此事,

  

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

     

jQuery UI团队创建了jquery.simulate.js以简化   触发本机浏览器事件以用于其自动化测试。   它的用法是在jQuery的触发器之后建模的。

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

对于你的问题,你必须使用javascript核心事件,因为@Bala回答了,

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

或使用location.href之类的,

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

此外,Hoffman为同一问题提供了答案

答案 2 :(得分:0)

试试这个:

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