fix form validation bug

This commit is contained in:
rlx 2011-11-02 17:27:20 +00:00
parent be4d7c9124
commit 4bb3196c03
3 changed files with 15 additions and 10 deletions

View file

@ -34,10 +34,16 @@ Ox.Form = function(options, self) {
itemIsValid: [] itemIsValid: []
}); });
// fixme: form isn't necessarily empty/invalid
self.options.items.forEach(function(item, i) { self.options.items.forEach(function(item, i) {
var validateItem = item.options('validate');
if (validateItem) {
validateItem(item.value(), function(data) {
self.itemIsValid[i] = data.valid;
});
} else {
self.itemIsValid[i] = item.value().length > 0;
}
self.itemIds[i] = item.options('id') || item.id; self.itemIds[i] = item.options('id') || item.id;
self.itemIsValid[i] = !!item.value().length;
that.append(self.$items[i] = Ox.FormItem({element: item})); that.append(self.$items[i] = Ox.FormItem({element: item}));
item.bindEvent({ item.bindEvent({
/* /*
@ -51,7 +57,7 @@ Ox.Form = function(options, self) {
}, },
*/ */
autovalidate: function(data) { autovalidate: function(data) {
validate(i, data.valid); validateForm(i, data.valid);
data.valid && self.$items[i].setMessage(''); data.valid && self.$items[i].setMessage('');
}, },
/* /*
@ -74,7 +80,7 @@ Ox.Form = function(options, self) {
self.formIsValid && that.submit(); self.formIsValid && that.submit();
}, },
validate: function(data) { validate: function(data) {
validate(i, data.valid); validateForm(i, data.valid);
// timeout needed for cases where the form is removed // timeout needed for cases where the form is removed
// from the DOM, triggering blur of an empty item - // from the DOM, triggering blur of an empty item -
// in this case, we don't want the message to appear // in this case, we don't want the message to appear
@ -90,13 +96,14 @@ Ox.Form = function(options, self) {
} }
function submitCallback(data) { function submitCallback(data) {
data.forEach(function(v, i) { Ox.forEach(data, function(v, i) {
self.$items[getItemIndexById(v.id)].setMessage(v.message); self.$items[getItemIndexById(v.id)].setMessage(v.message);
}); });
} }
function validate(pos, valid) { function validateForm(pos, valid) {
self.itemIsValid[pos] = valid; self.itemIsValid[pos] = valid;
Ox.print('VALID???', self.itemIsValid)
if (Ox.every(self.itemIsValid) != self.formIsValid) { if (Ox.every(self.itemIsValid) != self.formIsValid) {
self.formIsValid = !self.formIsValid; self.formIsValid = !self.formIsValid;
that.triggerEvent('validate', { that.triggerEvent('validate', {
@ -122,6 +129,7 @@ Ox.Form = function(options, self) {
} }
that.submit = function() { that.submit = function() {
// fixme: this seems to be unneeded
//Ox.print('---- that.values()', that.values()) //Ox.print('---- that.values()', that.values())
self.options.submit(that.values(), submitCallback); self.options.submit(that.values(), submitCallback);
}; };

View file

@ -106,13 +106,11 @@ Ox.BlockVideoTimeline = function(options, self) {
// OxTarget and OxSpecialTarget are needed for InfoList // OxTarget and OxSpecialTarget are needed for InfoList
.addClass('OxInterface OxTarget OxSpecialTarget') .addClass('OxInterface OxTarget OxSpecialTarget')
.css({ .css({
position: 'absolute',
top: '2px', top: '2px',
width: Math.round(self.options.duration) + 'px', width: Math.round(self.options.duration) + 'px',
height: '20px', height: '20px',
marginLeft: (-i * self.options.width) + 'px', marginLeft: (-i * self.options.width) + 'px',
//background: 'rgba(255, 0, 0, 0.1)', //background: 'rgba(255, 0, 0, 0.1)',
zIndex: 11
}) })
.appendTo(self.$lines[i]); .appendTo(self.$lines[i]);
} }

View file

@ -71,10 +71,9 @@ Ox.isValidEmail <f> Tests if a string is a valid e-mail address
> Ox.isValidEmail("foo@bar..com") > Ox.isValidEmail("foo@bar..com")
false false
@*/ @*/
// fixme: rename to isEmail
Ox.isValidEmail = function(str) { Ox.isValidEmail = function(str) {
return !!/^[0-9A-Z\.\+\-_]+@(?:[0-9A-Z\-]+\.)+[A-Z]{2,6}$/i.test(str); return !!/^[0-9A-Z\.\+\-_]+@(?:[0-9A-Z\-]+\.)+[A-Z]{2,6}$/i.test(str);
} };
/*@ /*@
Ox.pad <f> Pad a string to a given length Ox.pad <f> Pad a string to a given length