如何在firefox中动态点击一个href链接?预期的方法只适用于IE

How can I click an href link dynamically in firefox? Expected approach only works in IE

本文关键字:链接 href IE 适用于 方法 一个 firefox 动态      更新时间:2023-09-26

http://jsfiddle.net/HVGre/1/-测试链接。


我有一个html链接在我的页面上,我需要能够动态点击。在IE中,.click()函数可以正常工作,但在firefox中就失败了。我不能改变链接到一个按钮,所以这不是一个选项,它必须是一个href.

<a href="javascript:alert('!');" id="myHrefLink">My HREF Link</a>
<script>
   document.getElementById("myHrefLink").click();
</script>

在firefox中有很好的解决方法吗?如果有可能的话,我可以使用jQuery。

  1. 我不打算给链接分配一个事件处理程序,我只需要使用javascript动态地点击链接(而不用手动用鼠标)。

  2. 我不能改变原链接的功能。


编辑:

似乎Firefox有这个代码的问题是链接没有一个onclick事件,并通过href引用代码,否则不是onclick(在这里的例子中,代码是在href上,在我的实际代码中,href被设置为'#',然而链接在点击时触发其他动作,不要问我如何,这是一个奇怪的flash集成与plupload工具)。

<a href="javascript:alert('This works!');">Click me dynamically</a>

<a href="#" onclick="alert('This works!');">Click me dynamically</a>

第二个例子是坚实的,并在所有浏览器中工作时,点击()函数被触发,但我需要这两个中的第一个工作,而不改变链接动态或其他方式。有什么好主意吗?

这里的行为取决于Firefox的确切版本:

  1. Firefox 4和更早的版本根本没有click()方法。
  2. Firefox 5和6确实有这样的方法,该方法调度一个不可信的点击事件,但它们不允许不可信事件触发链接的href。
  3. Firefox 7及以上版本允许不可信的点击事件触发链接。

所以你的选择是等到9月底Firefox 7发布,或者如果你需要支持更早的版本,不要使用.click()来触发链接。获取链接的.href,然后将相关窗口的位置设置为该字符串应该作为一个解决方案。

这是我的另一个答案。这将动态地删除href中的内容,在href中添加"#",并在其中添加带有"alert('Link was clicked')"的onclick="。

代码如下:

<script type="text/javascript">
$(document).ready(function() {
    $('#myHrefLink').attr({
        href: '#',
        onclick: 'alert("Link was clicked");return false;'
    });
});
function clickLinkDynamically() {
    $('#myHrefLink').trigger('click');
}
</script>
<a href="javascript:alert('!');" id="myHrefLink">My HREF Link</a> 
<br /><br />
<div style="padding:10px;border:2px solid grey;background-color:lightgrey;cursor:pointer;" onclick="clickLinkDynamically();">Click here to dynamically click on the link</div>

你可以看到它在这里工作:http://jsfiddle.net/JVHEs/

答案是,此时你不能在firefox或chrome中动态点击链接的href部分。

<a href="javascript:alert('This works!');">This does not work dynamically.</a>

<a href="#" onclick="alert('This works!');">This works dynamically onclick.</a>

似乎只有当onclick属性存在时,FireFox才能够在HTML链接上触发click事件。有很多方法可以解决这个问题,只要链接可以以某种方式改变(见这篇文章中的大多数评论),但就我最初打算做的事情而言,目前只在IE中有效。

http://jsfiddle.net/HVGre/1/-查看失败结果在这里

这应该可以工作,即使在Firefox中。问题可能是在DOM准备好之前调用了.click。JQuery有一个很好的方法:

$(document).ready(function() {
    $("#myHrefLink").click();
});

在非JQuery中,你最好的选择是:

window.onload = function () {
    document.getElementById("myHrefLink").click();
}

这可能不是问题,但不确定还可能是什么…

这在大多数情况下都有效

function callClickEvent(element){
    var evt = document.createEvent("HTMLEvents"); 
    evt.initEvent("click", true, true); 
    element.dispatchEvent(evt);
}
callClickEvent(document.getElementById("myElement"));
编辑:

,这是另一个我总是松散的

function callClickEvent2(element){
    var evt = document.createEvent("MouseEvents");
    evt.initMouseEvent("click", true, true, window,
    0, 0, 0, 0, 0, false, false, false, false, 0, null);
    element.dispatchEvent(evt);
}
callClickEvent2(document.getElementById("myElement"));

my pastebin for this:http://pastebin.com/VMHvjRaR

我认为你将不得不使用jQuery,因为jQuery为我工作:

<script type="text/javascript">
function clickLinkDynamically() {
    $('#myHrefLink').click();
}
</script>
<a href="#" onclick="alert('Link was clicked');return false" id="myHrefLink">My HREF Link</a>
<br /><br />
<div style="padding:10px;border:2px solid grey;background-color:lightgrey;cursor:pointer;" onclick="clickLinkDynamically();">Click here to dynamically click on the link</div>

您可以在jsFiddle中看到一个示例:http://jsfiddle.net/7vCmj/

也许它不工作是因为你没有type="text/javascript" ?

试试这个

$(document).ready(function(){
    $('#myHrefLink').click(function(){
        alert('!');
    });

   //To trigger click dynamically use
   $('#myHrefLink').trigger('click');
}

试试这个,先添加对jQuery文件的引用。

<a href="javascript:void(0);" onclick="alert('!');" id="myHrefLink">My HREF Link</a>
<script>$("#myHrefLink").trigger("click");</script>

这是另一个解决方案,它将页面上的所有链接转换为不显眼地使用click事件。基本上就是转动

<a href="javascript:alert('This works!');">Click me dynamically</a>

<a href="#" onclick="alert('This works!');">Click me dynamically</a> 

享受:

$('a[href^="javascript:"][href!="javascript:;"]').each(function () {
    var oldHref = $(this).prop('href').substring(11);
    try {
        $(this).click(new Function('e', oldHref + ';e.preventDefault();')).prop('href', '#');
    }
    catch (err) {}
});
$('#myHrefLink').click();

你为什么不这样做呢?(除非我错过了什么)

$('#myHrefLink').click(function(){
    alert('!');
});

这里不清楚您想要实现什么,但由于您可以使用jQuery,请尝试:

<a href="" id="myHrefLink">blah blah</a>

触发点击:

 $('#myHrefLink').trigger('click');