/** * Determines if a form is dirty by comparing the current value of each element * with its default value. * * @param {Form} form the form to be checked. * @return {Boolean} true if the form is dirty, false * otherwise. * * Taken from here: http://stackoverflow.com/a/155812/641263 */ var confirmExitIfModified = (function () { function formIsDirty(form) { for (var i = 0; i < form.elements.length; i++) { var element = form.elements[i]; var type = element.type; if (type == "checkbox" || type == "radio") { if (element.checked != element.defaultChecked) { return true; } } else if (type == "hidden" || type == "password" || type == "text" || type == "textarea") { var cls = element.getAttribute('class'); if (!cls) cls = ''; if (element.value != element.defaultValue && // Fix for select2 multiple cls.indexOf('select2') == -1 && // Skip elements with ignore-changes class cls.indexOf('ignore-changes') == -1 ) { return true; } } else if (type == "select-one" || type == "select-multiple") { for (var j = 0; j < element.options.length; j++) { if (element.options[j].selected != element.options[j].defaultSelected) { return true; } } } } return false; } var submit = false; return function (form_id, message) { var form = document.forms[form_id] if (form) { form.onsubmit = function (e) { e = e || window.event; submit = true }; } window.onbeforeunload = function (e) { e = e || window.event; if (!submit && formIsDirty(form)) { // For IE and Firefox if (e) { e.returnValue = message; } // For Safari return message; } }; }; })();