Thanks. Indeed, I have since implemented an indexOf function. All is working.
However, now the indexOf is working, Firefox is now triggering onclick before onkeydown is being called (double call). There are no errors as such. Originally, it was triggering the onclick after the onkeydown, so I added a stop variable to prevent double-trigger of function but now that the onclick is triggering before onkeydown, I don't know what to do. Interestingly, when the second alert appears, the box closes itself without requring the ok button to be selected. Any ideas?
Code:
var stop = "";
var Links = document.getElementsByTagName('A');
for (var i = 0; i < Links.length; i++) {
if (Links[i].innerHTML != '') {
Links[i].onkeydown = confirmLink;
Links[i].onclick = confirmLink;
}
}
function confirmLink(e) {
ev = (e || window.event);
if (ev.type == 'click' && stop != 'stop') {
var obj = document.activeElement;
findDivId(ev, obj);
} else if (ev.type == 'keydown' && ev.keyCode == 13) {
findDivId(ev, document.activeElement);
}
}
function findDivId(e, obj) {
objLabel = obj.innerHTML;
var idx = ['menu'];
var tagx = ['A'];
var targ = e.target || e.srcElement;
var thisRef = obj.href;
var thisExt = obj.href.split('.').pop();
var dad = targ.id;
if (thisRef == undefined || thisRef == '') {
thisRef = obj;
}
parentTarg = targ.parentNode;
targID = targ.id;
if (targID == undefined) targID = '';
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function (elt /*, from*/ ) {
var len = this.length;
var from = Number(arguments[1]) || 0;
from = (from < 0) ? Math.ceil(from) : Math.floor(from);
if (from < 0) from += len;
for (; from < len; from++) {
if (from in this && this[from] === elt) return from;
}
return -1;
};
};
while ((targ = parentTarg) && targ.tagName != 'BODY' && idx.indexOf(targID) == -1) {
parentTarg = targ.parentNode;
targID = targ.id;
}
var cat = 'Links';
var dad = targ;
var thisDad = targID;
if (dad) {
String.prototype.capitalize = function () {
return this.replace(/(^|\s)([a-z])/g, function (m, p1, p2) {
return p1 + p2.toUpperCase();
});
};
thisDad = thisDad.toLowerCase().capitalize();
if (obj.title != '') {
thisRef = obj.title;
};
if (obj.text) {
thisText = obj.text;
} else {
t = obj.href;
thisText = t.substring(t.lastIndexOf('/') + 1);
}
alert('Category: ' + "\t" + cat + "\n" + 'Action: ' + thisText + ' (' + e.type + ')' + "\n" + 'Label: ' + "\t\t" + thisDad);
};
if (e.type == 'click' || (e.type == 'keydown' && e.keyCode == 13)) {
stop = 'stop';
};
};