2012-07-04 58 views
1

我一直在寻找一种方式来模拟点击<a>标签即将解决模拟点击Href锚点?

大家都知道,没有成功(唯一的解决方法是通过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> 
+0

所以这个问题是与Firefox ...在它在做什么是一个问题的线索?任何人都可以回答之前,你需要解释一下。 –

+0

@BenEverard问题是'Firefox将*不*重定向到myA.href' –

+0

您尝试过$(“#link”)。trigger(“click”);'?另外,你的param被称为'event',但你的代码使用'e.target'。 –

回答

2

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

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

支持的事件类型:

  • 鼠标:鼠标悬停,鼠标移开,鼠标按下,鼠标松开,鼠标移动,点击,DBLCLICK
  • 键盘:键盘,keydown,按键
0

看代码在这里

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

也许你的Firefox元素已。点击属性,所以它只是调用函数点击(事件)实际上没有做重定向。我的建议是删除这部分,并模拟真正的点击。 或者 你可能想模拟重定向使用window.location.href = anchor.href

+0

我已经写道:唯一的解决方法是由window.open ...我不想... :) –

0

而不是

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

你可以做

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

另一件事,就行了 if (e.target !== myA) 变量e没有定义,它应该是event

+0

你对e。我编辑。谢谢。关于window.location - 这就是我已经知道的解决方案(我也提到过这个问题) –

+0

哦,你说'window.open',我以为你在谈论另一种方法,对不起。 – Vithozor

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

+0

目前正在我的解决方案,这是谎言你的(从哈里申请attr并打开一个新窗口...我已经在我的问题中提到这是唯一的工作....仍然我更喜欢调整和寻找解决方案) –