浏览器友好的方式来模拟锚点击jQuery?
我正在尝试使用jQuery模拟对锚定标记的单击。我已经在StackOverflow和Google上搜索了一段时间,没有发现任何可以在我测试的所有浏览器上运行的东西。到目前为止,我发现:浏览器友好的方式来模拟锚点击jQuery?,jquery,cross-browser,click,Jquery,Cross Browser,Click,我正在尝试使用jQuery模拟对锚定标记的单击。我已经在StackOverflow和Google上搜索了一段时间,没有发现任何可以在我测试的所有浏览器上运行的东西。到目前为止,我发现: $(document).ready(function() { $.fn.fireEvent = function(eventType) { return this.each(function() { if (document.createEvent) { v
$(document).ready(function() {
$.fn.fireEvent = function(eventType) {
return this.each(function() {
if (document.createEvent) {
var event = document.createEvent("HTMLEvents");
event.initEvent(eventType, true, true);
return !this.dispatchEvent(event);
} else {
var event = document.createEventObject();
return this.fireEvent("on" + eventType, event)
}
});
};
$('a').fireEvent('click');
});
这将在Safari中触发单击事件,但不会触发FireFox或我测试的IE版本。所以,哦,伟大的头脑,我做错了什么?任何指导都将不胜感激。使用$('a')。单击()代码>这应该可以
$(function() {
fireClick($("a")[0]);
});
function fireClick(elem) {
if(typeof elem == "string") elem = document.getElementById(objID);
if(!elem) return;
if(document.dispatchEvent) { // W3C
var oEvent = document.createEvent( "MouseEvents" );
oEvent.initMouseEvent("click", true, true, window, 1, 1, 1, 1, 1, false, false, false, false, 0, elem);
elem.dispatchEvent(oEvent);
}
else if(document.fireEvent) { // IE
elem.click();
}
}
我在Chrome和Firefox上测试过这个,但是手头没有IE。在大多数情况下,这应该是透明的
$('a').live('click.simclick', function(event){
var $a = $(event.target)
setTimeout(function(){
if (event.isPropagationStopped())
return
$('<form/>')
.attr({
method: 'get',
target: $a.attr('target'),
action: $a.attr('href')
})
.appendTo(document.body)
.submit()
// clean up in case location didn't change
.remove()
}, 0)
})
// test it
$('a').eq(0).click()
$('a').live('click.simclick',函数(事件){
var$a=$(event.target)
setTimeout(函数(){
if(event.isPropagationStopped())
返回
$('')
艾特先生({
方法:“get”,
目标:$a.attr('target'),
操作:$a.attr('href')
})
.appendTo(document.body)
.提交()
//清理以防位置没有改变
.删除()
}, 0)
})
//测试一下
$('a')。等式(0)。单击()
我使用这种方法。看起来不错
$(function() {
fireClick($("a"));
});
function fireClick (elem) {
window.location = $(elem).attr('href');
}
这将触发jQuery单击事件处理程序,不是吗?我相信您必须访问底层DOM元素才能正确触发事件。看我的答案。这是我尝试的第一件事。它在Safari 4或FireFox 3.0.11上都不起作用(对我来说)。-1已确认:这只会触发通过jQuery分配给锚的事件处理程序。它不会模拟用户单击链接。它没有重定向到HREF。从2012年到2013年,一定发生了一些变化,因为这对我来说非常有效,所以+1。只是尝试了一下。Mac上的Safari 4或FireFox 3.0.11都不受欢迎。所有警报都会被触发,但我正在测试的浏览器上都没有DOM click本身。好的,我已经更新了我的答案,以使用我在网上找到的一个实现W3C事件调度标准的函数。请在Firefox上试试这个,因为我不能。适用于Safari,但不适用于FireFox。FireBug的错误控制台中没有说明原因。我认为FireFox只是阻止了这种行为。它可能会将程序性点击链接视为某种安全风险。您试图实现的目标是什么?是让浏览器跟随链接还是触发其他事件?我正在尝试让浏览器跟随链接。这看起来太简单了,但我已经空了几个小时了,所以我想我应该把它贴在这里。美元('a')怎么样。单击(function(){location.href=this.href})。单击()?这有点傻,但很管用。这个问题的时机很有趣。另请参见@Josh的答案,了解如何在IE.Re Firefox中使用它(重复我在上一节中说过的内容),您无法使用dispatchEvent
(迄今为止的所有FF版本)实现页面导航。虽然通常的“fire事件处理程序”+“bubble and repeat”在dispatchEvent
中确实会发生,但Firefox不会导航到href
属性中的url。看,这是一个错误。