I'm trying to simulate a click on an anchor tag using jQuery. I've been digging around StackOverflow and Google for a while and haven't found anything that works on all of the browsers I'm testing. So far, I've found this:
$(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');
});
This will fire a click event in Safari, but not FireFox or the version of IE I tested. So, oh mighty minds of SO, what am I doing wrong? Any guidance would be greatly appreciated.
This should work...
$(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();
}
}
I tested this in Chrome and Firefox but don't have an IE handy. This should work transparently in most scenarios.
$('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()
I use this approach. Seems to work okay.
$(function() {
fireClick($("a"));
});
function fireClick (elem) {
window.location = $(elem).attr('href');
}