Wolfgang Ruelfing wrote:
Hello,
you can put the general form validation code straight into the form
element
Thank you! This is exactly what I was looking for.
I had tried to do something like this on my own, but I made an
critical mistake: I set the validation error on the form itself,
instead of one of its children, and it didn't work. Your solution
works very well.
Here are a couple of improvements: I don't set the "composite" error
if any of the fields already have a more basic error (because I don't
want to override it with mine); and whenever the state of this
"composite" validation error changes, I push both fields on to the
user (otherwise I would get stale error icons on the browser, using
Ajax.) Can you please comment on my implementation? Is there a
simpler solution?
<form xmlns="http://apache.org/cocoon/forms/1.0#definition">
<on-create>
<javascript>
widget.setAttribute('phonemobile_valid', true);
</javascript>
</on-create>
<validation>
<javascript><![CDATA[
var phone = widget.lookupWidget('/phone'),
mobile = widget.lookupWidget('/mobile'),
old_valid = widget.getAttribute('phonemobile_valid'),
new_valid = true;
/* we require the user to enter his landline and/or mobile phone;
* if both fields are without a valid value AND without a
temporary,
* invalid value, set an error on both
*/
if (! phone.getValue() && ! mobile.getValue()
&& ! phone.getValidationError()
&& ! mobile.getValidationError()) {
var message = "Please enter your landline and/or mobile phone";
phone.setValidationError(new ValidationError(message, false));
mobile.setValidationError(new ValidationError(message, false));
new_valid = false;
}
/* if this composite validation state has changed since last time,
* push both fields to the browser
*/
if (old_valid != new_valid) {
widget.addWidgetUpdate(phone);
widget.addWidgetUpdate(mobile);
}
widget.setAttribute('phonemobile_valid', new_valid);
return new_valid;
]]></javascript>
</validation>
<widgets>
...
-Tobia
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]