diff --git a/lib/javascript-static.js b/lib/javascript-static.js index 94dd7e09b99..a60ddaf3f36 100644 --- a/lib/javascript-static.js +++ b/lib/javascript-static.js @@ -262,15 +262,17 @@ M.util.show_confirm_dialog = function(e, args) { return; } - if (target.get('tagName').toLowerCase() == 'a') { + var targetancestor = null, + targetform = null; + + if (target.test('a')) { window.location = target.get('href'); - } else if (target.get('tagName').toLowerCase() == 'input') { - var parentelement = target.get('parentNode'); - while (parentelement.get('tagName').toLowerCase() != 'form' && parentelement.get('tagName').toLowerCase() != 'body') { - parentelement = parentelement.get('parentNode'); - } - if (parentelement.get('tagName').toLowerCase() == 'form') { - parentelement.submit(); + } else if ((targetancestor = target.ancestor('a')) !== null) { + window.location = targetancestor.get('href'); + } else if (target.test('input')) { + targetform = target.ancestor('form'); + if (targetform && targetform.submit) { + targetform.submit(); } } else if (M.cfg.developerdebug) { alert("Element of type " + target.get('tagName') + " is not supported by the M.util.show_confirm_dialog function. Use A or INPUT");