即将解决模拟点击Href锚点?

时间:2012-07-04 08:22:15

标签: javascript jquery html cross-browser

我一直想找到一种方法来模拟<a>标记

上的点击

众所周知,没有成功(唯一的解决方法是window.open ...)

然而,我在网络中发现了一些代码的和平,并设法使其工作:

http://jsbin.com/itujek/5/edit

Chrome
IE

问题在于FF。

我很乐意与您分享这些代码,并为FF提供解决方案。

我应该在这段代码中做什么才能让这段代码与FF一起工作?

  <script>
        function doClick(event, myA)
        {
            if (myA.click)
            {
                myA.click()
            }
            else if (document.createEvent)
            {
                if (event.target !== myA)
                {
                    var tmpEvent = document.createEvent("MouseEvents");
                    tmpEvent.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
                    var allowDefault = myA.dispatchEvent(tmpEvent);
                }
            }
        }


      $(document).ready(function(){

            $(".myBtn").on('click',function (event) 
                           { doClick(event, $("#link")[0]);    });
      });



    </script>
</head>
<body>
    <a id="link" href="http://www.msdn.com">Normal link</a>
    <button type="button" class="myBtn"   >
        do click</button>
    <br />
    <br />
</body>

4 个答案:

答案 0 :(得分:2)

您可以尝试使用jquery.simulate.js

$(elem).simulate(mouse_or_keyboard_event_type, options);

支持的事件类型:

  • 鼠标: mouseover,mouseout,mousedown,mouseup,mousemove,click,dblclick
  • 键盘: keyup,keydown,keypress

答案 1 :(得分:0)

查看此处的代码

if (myA.click)
{
   myA.click()
}

也许你的firefox元素有.click属性所以它只是调用函数click(event)而不实际进行重定向。我建议只是删除这部分并模拟真正的点击。 要么 您可能希望使用window.location.href = anchor.href

来模拟重定向

答案 2 :(得分:0)

而不是

if (myA.click){
    myA.click();
}

你可以做到

if (myA.click){
    window.location.href = myA.href;
}

另一件事,就行了 if (e.target !== myA) 变量e未定义,应为event

答案 3 :(得分:0)

在这样的场合,我宁愿避免'假装'事件。您是否尝试过重新调整href并手动重定向到它?试试这个:

$(".myBtn").on('click', function(event) {
    doClick($("#link"));
});


function doClick($el) {
    var href = $el[0].href;
    if ($el.attr("target") != "_blank") {
        window.location.assign(href );
    }
    else {
        window.open(href, "newWindow");
    }
}

Example fiddle