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

Javascript 即将解决模拟点击Href锚?,javascript,jquery,html,cross-browser,Javascript,Jquery,Html,Cross Browser,我在寻找一种模拟点击 问题在于FF 我很高兴与您分享代码,并为解决方案,将在FF 为了使此代码与FF一起工作,我应该在该代码中执行什么操作 <script> function doClick(event, myA) { if (myA.click) { myA.click() } else if (document.cre

我在寻找一种模拟点击

问题在于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>

函数doClick(事件,myA)
{
如果(myA.click)
{
myA.click()
}
else if(document.createEvent)
{
如果(event.target!==myA)
{
var tmpEvent=document.createEvent(“MouseEvents”);
initMouseEvent(“单击”,true,true,window,0,0,0,0,false,false,false,false,false,false,0,null);
var allowDefault=myA.dispatchEvent(tmpEvent);
}
}
}
$(文档).ready(函数(){
$(“.myBtn”)。在('click',函数(事件)
{doClick(event,$(“#link”)[0]);};
});
点击


您可以尝试使用:

支持的事件类型:

  • 鼠标:mouseover、mouseout、mousedown、mouseup、mousemove、click、dblclick
  • 键盘:向上键、向下键、按键
  • 查看此处的代码

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

    而不是

    if (myA.click){
        myA.click();
    }
    
    你能行

    if (myA.click){
        window.location.href = myA.href;
    }
    
    另一件事,在线上
    if(例如,target!==myA)

    变量
    e
    没有定义,它应该是
    event

    在这种情况下,我更喜欢避免“伪造”事件。您是否尝试过重新键入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");
        }
    }
    

    所以问题在于FireFox。。。有什么线索表明它会成为一个问题吗?在任何人回答之前,您需要解释。@BenEverard问题是
    Firefox将*不*重定向到myA.href
    您是否尝试过$(“#link”).trigger(“单击”)<代码>?此外,您的参数被称为
event
,但您的代码使用了
e.target`.@RoryMcCrossan no。。。。(开玩笑吧,这是我尝试的第一件事。)如果你绑定了自己的click方法,那么click就起作用了。但是如果你不这样做,它就不会像你按下锚一样被激活。我编辑。谢谢关于window.location-这是我已经知道的解决方案(我在问题中也提到过)哦,你说的是
window.open
,我以为你在谈论另一种方法,对不起。我已经写道:唯一的解决方法是by window.open。。。这是我不想要的…:)目前我正在开发我的解决方案,这只是你的解决方案(从href获取attr并打开一个新窗口…我在问题中已经提到这是唯一的解决方案…但我更喜欢调整并找到解决方案)
if (myA.click){
    window.location.href = myA.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");
    }
}