我一直想找到一种方法来模拟<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>
答案 0 :(得分:2)
您可以尝试使用jquery.simulate.js:
$(elem).simulate(mouse_or_keyboard_event_type, options);
支持的事件类型:
答案 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");
}
}