A click on chosen links before JavaScript events have been applied to them will be put in a queue and called when all event handlers are in place. That will take 5 seconds, since there's a delay applied to a script applying the events.
Script loaded: false
Go to robertnyman.com (click on this won't be prevented)
A click on this image will be prevented, and then called when its events have been applied
Code used
clickCatcher
// By Robert Nyman, http://robertnyman.com/clickcatcher/ - This content is released under the (Link Goes Here) MIT License: http://www.opensource.org/licenses/mit-license.php
(function () {
function addEvent(elm, evt, func) {
if (elm.addEventListener) {
elm.addEventListener(evt, func, false);
}
else {
elm.attachEvent(("on" + evt), func);
}
}
function removeEvent(elm, evt, func) {
if (elm.removeEventListener) {
elm.removeEventListener(evt, func, false);
}
else {
elm.detachEvent(("on" + evt), func);
}
}
// fireEvent by Jehiah Czebotar, http://jehiah.cz/archive/firing-javascript-events-properly
function fireEvent(element, event) {
var evt;
if (document.createEvent) {
// dispatch for firefox + others
evt = document.createEvent("HTMLEvents");
evt.initEvent(event, true, true ); // event type,bubbling,cancelable
return !element.dispatchEvent(evt);
} else {
// dispatch for IE
evt = document.createEventObject();
return element.fireEvent('on'+event,evt);
}
}
clickCatcher = function () {
var clicks = [],
addClicks = function (evt) {
var classCheck = /catch/,
body = /body/i,
target = (evt.target)? evt.target : evt.srcElement;
while (!classCheck.test(target.className) && !body.test(target.nodeName)) {
target = target.parentNode;
}
if (classCheck.test(target.className)) {
clicks.push(target);
if (evt.preventDefault) {
evt.preventDefault();
}
evt.returnValue = false;
return false;
}
},
callClicks = function () {
removeEvent(document, "click", addClicks);
for (var i=0, il=clicks.length; i<il; i++) {
fireEvent(clicks[i], "click");
};
},
init = function () {
addEvent(document, "click", addClicks);
// Could be called here, but now called manually in script loaded later - adapt to your situation
//addEvent(window, "load", callClicks);
};
return {
init : init,
callClicks : callClicks
};
}();
clickCatcher.init();
return clickCatcher;
})();
Page-specific script in this demo (in the clicks.js file)
var scriptLoaded = document.getElementById("script-loaded"),
imageLink = document.getElementById("image-link");
// Shows when the script is loaded
scriptLoaded.innerHTML = "true";
scriptLoaded.className = "loaded";
// Assigns click event to it
imageLink.onclick = function () {
if (confirm("Sure you want to go to the image page?")) {
location.href = imageLink.href;
}
return false;
};
// Call callClicks of clickCatcher
clickCatcher.callClicks();
