如何在firefox中动态点击一个href链接?预期的方法只适用于IE
How can I click an href link dynamically in firefox? Expected approach only works in IE
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。
我不打算给链接分配一个事件处理程序,我只需要使用javascript动态地点击链接(而不用手动用鼠标)。
我不能改变原链接的功能。
编辑:
似乎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的确切版本:
- Firefox 4和更早的版本根本没有
click()
方法。 - Firefox 5和6确实有这样的方法,该方法调度一个不可信的点击事件,但它们不允许不可信事件触发链接的href。
- 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');
- 使用jQuery搜索链接HREF值
- Javascript/jQuery链接/href补充的动态文本
- 带有javascript的拖运链接href
- Yii:TbCollapse 多链接(href = #collapse 并将状态更新为 be=“1”)
- 单击更改<链接 href=“#”>
- 更改链接 HREF 目标
- 通过 JavaScript 链接 href 以单击选项卡中的按钮
- 无法读取未定义的链接 href 的属性“top”
- 如何根据用户选择的选项更改链接 href(单击)
- Jquery - 如何从链接 href 获取页码并用作类
- Javascript 正则表达式用于替换页面上所有链接 href 中的 & 符号
- 获取链接 href 并将其应用于另一个链接 jQuery
- 更改链接 href 基于 viewport (Javascript)
- 冷融合:空链接href="#"错误
- 替换超链接href中的匹配文本
- 使用文本输入值动态更改链接href属性
- iPhone/Android浏览器偶尔会关注链接href,而不是jQuery onclick事件
- 当链接`href='#'`在routeProvider中
- 如果前一个字符是/,如何忽略正则表达式结果(基本上忽略链接href内容)
- Jquery编辑链接href如果主体class = x