Skip to content

Instantly share code, notes, and snippets.

@enumag
Created May 31, 2013 19:44
Show Gist options
  • Save enumag/5687497 to your computer and use it in GitHub Desktop.
Save enumag/5687497 to your computer and use it in GitHub Desktop.
Form messages
/**
* Display error message.
*/
Nette.addError = function(elem, message) {
var el = $(elem);
el.closest('.control-group').addClass('error');
el.closest('.controls').children('.help-inline').remove();
el.closest('.controls').append(' ', $('<p>', {
text: message,
'class': 'help-inline'
}));
};
/**
* Removes error message.
*/
Nette.removeError = function(elem) {
var el = $(elem);
el.closest('.control-group').removeClass('error');
el.closest('.controls').children('.help-inline').remove();
};
/**
* Validates whole form.
*/
Nette.validateForm = function(sender) {
var form = sender.form || sender;
if (form['nette-submittedBy'] && form['nette-submittedBy'].getAttribute('formnovalidate') !== null) {
return true;
}
var success = true;
for (var i = 0; i < form.elements.length; i++) {
var elem = form.elements[i];
if (!(elem.nodeName.toLowerCase() in {input: 1, select: 1, textarea: 1}) ||
(elem.type in {hidden: 1, submit: 1, image: 1, reset: 1}) ||
elem.disabled || elem.readonly
) {
continue;
}
if (!Nette.validateControl(elem)) {
if (success && elem.focus) {
elem.focus();
}
success = false;
}
}
return success;
};
/**
* Setup handlers.
*/
Nette.initForm = function(form) {
form.noValidate = 'novalidate';
Nette.addEvent(form, 'submit', function(e) {
if (!Nette.validateForm(form)) {
e = e || event;
e.cancelBubble = true;
if (e.stopPropagation) {
e.stopPropagation();
}
return false;
}
});
Nette.addEvent(form, 'click', function(e) {
e = e || event;
var target = e.target || e.srcElement;
form['nette-submittedBy'] = (target.type in {submit: 1, image: 1}) ? target : null;
});
for (var i = 0; i < form.elements.length; i++) {
Nette.addEvent(form.elements[i], 'blur', function(e) {
Nette.removeError(this);
Nette.validateControl(this);
});
Nette.toggleControl(form.elements[i], null, true);
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment