Client-side form validation

From Joomla! Documentation

Revision as of 17:18, 3 October 2009 by Rodrigo i s (Talk | contribs)

Validation works, but..

On a component of my own in backend, this makes the validation, returns the error, but data in the form are lost:

function save()
 global $mainframe;
 JRequest::checkToken() or jexit( 'Invalid Token' );
 $email = JRequest::getString('email', ); // start email validation
 if($email != null) // email is not required but if isset must be valid
 jimport( 'joomla.mail.helper' );
     if (!JMailHelper::isEmailAddress($email))
     $mainframe->enqueueMessage('Email not valid', 'error');
     return $this->execute('edit');
  $row =& JTable::getInstance('mytable', 'Table');          
  if (!$row->bind(JRequest::get('post'))) 
     JError::raiseError(500, $row->getError() );

What's wrong here? Any suggestion to retrieve the data that I was filling before the validation stop..?

(Dangerfield 19:58, 13 March 2009 (UTC))

Add "validate" to the button class

I think this is a great feature in the Joomla 1.5, and wish more developers implemented it in their forms.

The best example of this in action is on the Joomla 1.5 registration form. \components\com_user\views\register\tmpl\default.php.

I am not sure why they left out adding "validate" to the button class, but it is essential to performing the validation on submit.

Is the code example in "Really only accept form after validation" wrong?

I'm new to Joomla, so I don't know if this is something that changed recently, but, at least when using JHTML::_('behavior.formvalidation'), the example shown in that section does not work as one would expect. Namely, the function myValidate(f) is not used.

This seems to be because in validation.js, the attachToForm function overwrites the "onclick" value of all inputs/buttons of type "submit". Hence the form is validated when the button itself is clicked, and not when the form is submitted. So if the validation is wrong, the value in "onSubmit" (and therefore myValidate) will never be used.

Am I missing something here?