<?php /** * @package forms * @subpackage fields-formattedinput */ /** * A Single Numeric field extending a typical * TextField but with validation. * @package forms * @subpackage fields-formattedinput */ class NumericField extends TextField{ function jsValidation() { $formID = $this->form->FormName(); $error = _t('NumericField.VALIDATIONJS', 'is not a number, only numbers can be accepted for this field'); $jsFunc =<<<JS Behaviour.register({ "#$formID": { validateNumericField: function(fieldName) { el = _CURRENT_FORM.elements[fieldName]; if(!el || !el.value) return true; if(el.value.match(/^([0-9]+(\.[0-9]+)?$)/)) { return true; } else { validationError(el, "'" + el.value + "' $error","validation"); return false; } } } }); JS; Requirements::customScript($jsFunc, 'func_validateNumericField'); //return "\$('$formID').validateNumericField('$this->name');"; return <<<JS if(typeof fromAnOnBlur != 'undefined'){ if(fromAnOnBlur.name == '$this->name') $('$formID').validateNumericField('$this->name'); }else{ $('$formID').validateNumericField('$this->name'); } JS; } /** PHP Validation **/ function validate($validator){ if($this->value && !is_numeric($this->value)){ $validator->validationError( $this->name, sprintf( _t('NumericField.VALIDATION', "'%s' is not a number, only numbers can be accepted for this field"), $this->value ), "validation" ); return false; } else{ return true; } } function dataValue() { return (is_numeric($this->value)) ? $this->value : 0; } } ?>