Talk

Client-side form validation

From Joomla! Documentation

The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Validation works, but..[edit]

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[edit]

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?[edit]

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 in the first place when the button itself is clicked. So if the validation is wrong, the value in "onSubmit" (and therefore myValidate) will never be used.

Am I missing something here? Otherwise I think we should change the example.

(rodrigo_i_s)

Validation vs Toolbar[edit]

I am trying to use this validation in a form with the standard toolbar. Everything is working fine, until the user clicks a toolbar button.

The toolbar buttons do submit the form, even the Cancel button. Thus in the function myValidate() You have to check for task == cancel before validation, or get the message.

However, when clicked other buttons, the validation shows the message, but still submits the form. Tried to empty the field task, but without success.

--UsagiYojimbo 09:24, 19 October 2009 (UTC)

Found a solution:

 function submitbutton(pressbutton) {
   var f = document.adminForm;
   if (pressbutton == "cancel") {
     submitform(pressbutton);
   }
   else if (document.formvalidator.isValid(f)) {
     submitform(pressbutton);
   }
   else {
     alert("Some values are not acceptable. Please check them.");
     f.task.value = "";
   }
 }

--UsagiYojimbo 12:14, 29 October 2009 (UTC)