Form slider with formvalidator in React Range slider component
20 Mar 202324 minutes to read
The Slider component can be validated using our FormValidator. The following steps walk-through slider validation.
- Render slider component inside a form.
- Bind changed event in the slider component to validate the slider value when the value changes.
-
Initialize and render FormValidator for the form using form ID.
// Initialize Form validation let formObj: FormValidator; formObj = new FormValidator("#formId", options);
-
Set the required property in the FormValidator rules collection. Here, the min property of slider that sets the minimum value in the slider component is set, and it has hidden input as enable
validateHidden
property is set to true.```ts
// Slider element
// sets required property in the FormValidator rules collection
let options: FormValidatorModel = {
rules: {
‘default’: {
validateHidden: true,
min: [6, “You must select value greater than 5”]
}
}
};
> Form validation is done either by ID or name value of the slider component. Above ID of the slider is used to validate it.
Using slider name: Render slider with name attribute. In the following code snippet, name attribute value of slider is used for form validation.
```ts
// Slider element
<div id="default" name="slider"></div>
// sets required property in the FormValidator rules collection
let options: FormValidatorModel = {
rules: {
'slider': {
validateHidden: true,
min: [6, "You must select value greater than 5"]
}
}
};
-
Validate the form using validate method, and it validates the slider value with the defined rules collection and returns the result. If user selects the value less than the minimum value, form will not submit.
formObj.validate();
-
Slider validation can be done during value changes in slider. Refer to the following code snippet.
// change event handler for slider function onChanged(args: any) { formObj.validate(); }
The FormValidator
has following default validation rules, which are used to validate the Slider component.
Rules | Description | Example |
---|---|---|
max |
Slider component must have value less than or equal to max number |
if max: 3 , 3 is valid and 4 is invalid |
min |
Slider component must have value greater than or equal to min number |
if min: 4 , 5 is valid and 2 is invalid |
regex |
Slider component must have valid value in regex format |
if regex: '/4/ , 4 is valid and 1 is invalid |
range |
Slider component must have value between range number |
if range: [4,5] , 4 is valid and 6 is invalid |
import * as React from 'react';
import * as ReactDOM from "react-dom";
import { SliderComponent } from '@syncfusion/ej2-react-inputs';
import { FormValidator } from '@syncfusion/ej2-inputs';
function App() {
React.useEffect(() => {
componentDidMount();
}, []);
let ticks = { placement: "Before", largeStep: 20, smallStep: 5, showSmallTicks: true };
let value = [30, 70];
// sets required property in the FormValidator rules collection
let minOptions = {
rules: {
"min-slider": {
validateHidden: true,
min: [40, "You must select value greater than or equal to 40"]
}
}
};
// sets required property in the FormValidator rules collection
let maxOptions = {
rules: {
"max-slider": {
validateHidden: true,
max: [40, "You must select value less than or equal to 40"]
}
}
};
// sets required property in the FormValidator rules collection
let valOptions = {
rules: {
"val-slider": {
validateHidden: true,
regex: [/40/, "You must select value equal to 40"]
}
}
};
// sets required property in the FormValidator rules collection
let rangeOptions = {
rules: {
"range-slider": {
validateHidden: true,
range: [40, 80, "You must select values between 40 and 80"]
}
}
};
// sets required property in the FormValidator rules collection
let customOptions = {
rules: {
"custom-slider": {
validateHidden: true,
range: [validateRange.bind(this), "You must select values between 40 and 80"]
}
}
};
// Initialize Form validation
let formMinObj = null;
let formMaxObj = null;
let formValObj = null;
let formRangeObj = null;
let formCustomObj = null;
function componentDidMount() {
formMinObj = new FormValidator("#formMinId", minOptions);
formMaxObj = new FormValidator("#formMaxId", maxOptions);
formValObj = new FormValidator("#formValId", valOptions);
formRangeObj = new FormValidator("#formRangeId", rangeOptions);
formCustomObj = new FormValidator("#formCustomId", customOptions);
}
function onMinChanged(args) {
// validate the slider value in the form
formMinObj.validate();
}
function onMaxChanged(args) {
// validate the slider value in the form
formMaxObj.validate();
}
function onValChanged(args) {
// validate the slider value in the form
formValObj.validate();
}
function onRangeChanged(args) {
// validate the slider value in the form
formRangeObj.validate();
}
function onCustomChanged(args) {
// validate the slider value in the form
formCustomObj.validate();
}
let SliderCustomObj = null;
function validateRange(args) {
return (SliderCustomObj.value[0] >= 40 &&
SliderCustomObj.value[1] <= 80);
}
return (<div id="container">
<div className="col-lg-12 control-section">
<div className="content-wrapper">
<div className="form-title">
<span>Min</span>
</div>
<form id="formMinId" className="form-horizontal">
<div className="form-group">
<div className="e-float-input">
<SliderComponent id="min-slider" name="min-slider" type="MinRange" value={30} ticks={ticks} changed={onMinChanged.bind(this)}/>
</div>
</div>
</form>
<div className="form-title">
<span>Max</span>
</div>
<form id="formMaxId" className="form-horizontal">
<div className="form-group">
<div className="e-float-input">
<SliderComponent id="max-slider" name="max-slider" type="MinRange" value={30} ticks={ticks} changed={onMaxChanged.bind(this)}/>
</div>
</div>
</form>
<div className="form-title">
<span>Value</span>
</div>
<form id="formValId" className="form-horizontal">
<div className="form-group">
<div className="e-float-input">
<SliderComponent id="val-slider" name="val-slider" type="MinRange" value={30} ticks={ticks} changed={onValChanged.bind(this)}/>
</div>
</div>
</form>
<div className="form-title">
<span>Range</span>
</div>
<form id="formRangeId" className="form-horizontal">
<div className="form-group">
<div className="e-float-input">
<SliderComponent id="range-slider" name="range-slider" type="MinRange" value={30} ticks={ticks} changed={onRangeChanged.bind(this)}/>
</div>
</div>
</form>
<div className="form-title">
<span>Custom</span>
</div>
<form id="formCustomId" className="form-horizontal">
<div className="form-group">
<div className="e-float-input">
<SliderComponent id="custom-slider" name="custom-slider" type="Range" value={value} ticks={ticks} changed={onCustomChanged.bind(this)} ref={slider => {
SliderCustomObj = slider;
}}/>
</div>
</div>
</form>
</div>
</div>
</div>);
}
export default App;
ReactDOM.render(<App />, document.getElementById('element'));
import * as React from 'react';
import * as ReactDOM from "react-dom";
import { SliderComponent } from '@syncfusion/ej2-react-inputs';
import { FormValidator, FormValidatorModel } from '@syncfusion/ej2-inputs';
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
function App() {
React.useEffect(() => {
componentDidMount();
}, []);
let ticks: object ={ placement: "Before", largeStep: 20, smallStep: 5, showSmallTicks: true };
let value: number[] = [30, 70];
// sets required property in the FormValidator rules collection
let minOptions: FormValidatorModel = {
rules: {
"min-slider": {
validateHidden: true,
min: [40, "You must select value greater than or equal to 40"]
}
}
};
// sets required property in the FormValidator rules collection
let maxOptions: FormValidatorModel = {
rules: {
"max-slider": {
validateHidden: true,
max: [40, "You must select value less than or equal to 40"]
}
}
};
// sets required property in the FormValidator rules collection
let valOptions: FormValidatorModel = {
rules: {
"val-slider": {
validateHidden: true,
regex: [/40/, "You must select value equal to 40"]
}
}
};
// sets required property in the FormValidator rules collection
let rangeOptions: FormValidatorModel = {
rules: {
"range-slider": {
validateHidden: true,
range: [40, 80, "You must select values between 40 and 80"]
}
}
};
// sets required property in the FormValidator rules collection
let customOptions: FormValidatorModel = {
rules: {
"custom-slider": {
validateHidden: true,
range: [validateRange.bind(this), "You must select values between 40 and 80"]
}
}
};
// Initialize Form validation
let formMinObj: FormValidator = null as any;
let formMaxObj: FormValidator = null as any;
let formValObj: FormValidator = null as any;
let formRangeObj: FormValidator = null as any;
let formCustomObj: FormValidator = null as any;
function componentDidMount(){
formMinObj = new FormValidator("#formMinId", minOptions);
formMaxObj = new FormValidator("#formMaxId", maxOptions);
formValObj = new FormValidator("#formValId", valOptions);
formRangeObj = new FormValidator("#formRangeId", rangeOptions);
formCustomObj = new FormValidator("#formCustomId", customOptions);
}
function onMinChanged(args: any): void {
// validate the slider value in the form
formMinObj.validate();
}
function onMaxChanged(args: any): void {
// validate the slider value in the form
formMaxObj.validate();
}
function onValChanged(args: any): void {
// validate the slider value in the form
formValObj.validate();
}
function onRangeChanged(args: any) {
// validate the slider value in the form
formRangeObj.validate();
}
function onCustomChanged(args: any) {
// validate the slider value in the form
formCustomObj.validate();
}
let SliderCustomObj: SliderComponent = null as any;
function validateRange(args: any) {
return (
(SliderCustomObj.value as number[])[0] >= 40 &&
(SliderCustomObj.value as number[])[1] <= 80
);
}
return (
<div id="container">
<div className="col-lg-12 control-section">
<div className="content-wrapper">
<div className="form-title">
<span>Min</span>
</div>
<form id="formMinId" className="form-horizontal">
<div className="form-group">
<div className="e-float-input">
<SliderComponent
id="min-slider"
name="min-slider"
type="MinRange"
value={30}
ticks={ticks}
changed={onMinChanged.bind(this)}
/>
</div>
</div>
</form>
<div className="form-title">
<span>Max</span>
</div>
<form id="formMaxId" className="form-horizontal">
<div className="form-group">
<div className="e-float-input">
<SliderComponent
id="max-slider"
name="max-slider"
type="MinRange"
value={30}
ticks={ticks}
changed={onMaxChanged.bind(this)}
/>
</div>
</div>
</form>
<div className="form-title">
<span>Value</span>
</div>
<form id="formValId" className="form-horizontal">
<div className="form-group">
<div className="e-float-input">
<SliderComponent
id="val-slider"
name="val-slider"
type="MinRange"
value={30}
ticks={ticks}
changed={onValChanged.bind(this)}
/>
</div>
</div>
</form>
<div className="form-title">
<span>Range</span>
</div>
<form id="formRangeId" className="form-horizontal">
<div className="form-group">
<div className="e-float-input">
<SliderComponent
id="range-slider"
name="range-slider"
type="MinRange"
value={30}
ticks={ticks}
changed={onRangeChanged.bind(this)}
/>
</div>
</div>
</form>
<div className="form-title">
<span>Custom</span>
</div>
<form id="formCustomId" className="form-horizontal">
<div className="form-group">
<div className="e-float-input">
<SliderComponent
id="custom-slider"
name="custom-slider"
type="Range"
value={value}
ticks={ticks}
changed={onCustomChanged.bind(this)}
ref={slider => {
SliderCustomObj = slider as any;
}}
/>
</div>
</div>
</form>
</div>
</div>
</div>
);
}
export default App;
ReactDOM.render(<App />, document.getElementById('element'));