After the post Sencha/ExtJs: Validation fields on the fly with VType, I would write some words concerning the form’s validation on client side with the Sencha/ExtJs framework.
A concret example, with a form containing several fields and in our case a date field and a time field.
First, we will create a VType in order to valid the time field;
<!-- Vtype or validator for the Time field in deadline --> Ext.apply(Ext.form.field.VTypes, { TimeVType: function(v) { return /^([0-1]?[0-9]|2[0-3]):([0-5][0-9])$/.test(v); }, TimeVTypeText: 'The time must have the format HH:MM', TimeVTypeMask: /[\d\:]/i } );
…and the form code would be:
id: 'myWindowFormID', xtype: "form", bodyPadding: 2, defaultType: "textfield", frame:true, items: [ <!-- New Line --> { new Ext.form.DateField({ fieldLabel: 'Deadline', name: 'deadlineDate', id: 'deadlineDate', format:'d/m/Y', allowBlank:false, value : new Date(), width: 200 }), { fieldLabel: '', disabled: false, editable: true, allowBlank:false, hideTrigger:true, xtype: 'textfield', vtype: 'TimeVType', name:"deadlineTime", id: 'deadlineTime', value: '09:00', height: 25, width: 50 } } ], buttons: [ { text: 'OK', handler: function() { // Show a waiting message box Ext.MessageBox.show({ msg: 'Sending and processing the data...', title: 'Please wait', progressText: 'Sending and processing the data...', progress: true, closable: false, width:300, wait:true, waitConfig: {interval:200} }); // Get the form fom the current OK button <!-- var form = Ext.getCmp('myWindowFormID').getForm(); --> var form = btn.up('form').getForm(); form.submit({ url: 'myController.do?action=doMyBusiness', method: 'POST', waitTitle: 'Please wait', waitMsg: 'Sending and processing the data...', success: function(form, action) { // Hide the waiting message box Ext.MessageBox.hide(); //var result = Ext.JSON.decode(response.responseText); var result = action.result; if (result.success && result.success === 'true') { var prepareFileName = result.data; Ext.MessageBox.alert('alert','done!!!'); } else { if(result.errorMessage === ''){ Ext.MessageBox.alert('alert','error on server!'); }else{ Ext.MessageBox.alert('alert',result.errorMessage; } } } ,failure: function(form, action) { // Hide the waiting message box Ext.MessageBox.hide(); Ext.MessageBox.alert('alert', 'the form is invalid!!!'); } }); // end-of-submit } }
….so if we fill a wrong values in the deadline and time fields like:
… and submit the form by clicking on a ‘OK’ button, we will obtain the following message specified in the above code:
… an other way, it is check the form fields on the fly by call the method form.isValid() like:
var form = Ext.getCmp('myWindowFormID').getForm(); if(form.isValid()==false){ Ext.MessageBox.alert('alert', 'the form is invalid!!!'); }else{ form.submit({ .... }); }
This practise works, but in reality it’s not the best practise, so, I advise you to read the official Ext.form.action.Submit documentation.
That’s all!!!!
Best regards,
Huseyin OZVEREN