Phone Length instant Validation
-
Hi, thank you for the plugin.
Is there a way that to validate the length of the phone number upon clicking save changes in the Contact Section before submitting the order?
Currently, it gives a notification error about the phone number being incomplete when the “Place Order” button is clicked. However, if there is a way to show the error when the Save Button in the Contact Section is clicked, I would really appreciate it.
-
Hi @bouzzie,
Currently, it is not possible to add a custom validation type (for instance, the phone length or format).
The necessary Javascript changes to make it possible have already been developed and will be available in a future version of the plugin, probably v1.5.0.
However, we’ll release one or more path releases before that version.
I’ll let you know here once that is available.
As a side note, we’ll introduce international phone input as part of the Fluid Checkout PRO version. It will show the country code and flag, and format the phone number digits according to each country.
If you are interested in such a feature, be sure to visit our website and sign up for the newsletter to receive more information about the PRO version.
Best,
DiegoHi @bouzzie,
The version 1.5.0 has been released with the necessary Javascript methods that allow developers to extend the client-side (inline) validation.
There is no documentation of this feature yet, however, it should be easy enough to follow the code in order to implement this custom validation.
Check the file plugins/fluid-checkout/js-src/checkout-validation.js, and refer to the example below which implements a custom validation for a delivery date field.
/** * Manage checkout front-end validation for: WooCommerce Order Delivery (by ThemeSquad) * * DEPENDS ON: * - checkout-validation.js // Main checkout validation script from Fluid Checkout */ (function (root, factory) { if ( typeof define === 'function' && define.amd ) { define([], factory(root)); } else if ( typeof exports === 'object' ) { module.exports = factory(root); } else { root.CheckoutValidationWooCommerceOrderDelivery = factory(root); } })(typeof global !== 'undefined' ? global : this.window || this.global, function (root) { 'use strict'; var $ = jQuery; var _hasInitialized = false; var _hasJQuery = ( $ != null ); var _publicMethods = { }; var _settings = { datePickerSelector: '#delivery_date', typeDeliveryDateSelector: '#delivery_date_visible', validationMessages: { out_of_range: 'The selected date "{selected_date}" is out of range. Please select a date from "{start_date}" to "{end_date}".', disabled: 'The selected date "{selected_date}" is not available.', }, }; /** * METHODS */ /*! * Merge two or more objects together. * (c) 2017 Chris Ferdinandi, MIT License, https://gomakethings.com * @param {Boolean} deep If true, do a deep (or recursive) merge [optional] * @param {Object} objects The objects to merge together * @returns {Object} Merged values of defaults and options */ var extend = function () { // Variables var extended = {}; var deep = false; var i = 0; // Check if a deep merge if ( Object.prototype.toString.call( arguments[0] ) === '[object Boolean]' ) { deep = arguments[0]; i++; } // Merge the object into the extended object var merge = function (obj) { for (var prop in obj) { if (obj.hasOwnProperty(prop)) { // If property is an object, merge properties if (deep && Object.prototype.toString.call(obj[prop]) === '[object Object]') { extended[prop] = extend(extended[prop], obj[prop]); } else { extended[prop] = obj[prop]; } } } }; // Loop through each object and conduct a merge for (; i < arguments.length; i++) { var obj = arguments[i]; merge(obj); } return extended; }; /** * Check if form row is required. * @param {Element} formRow Form row element. * @return {Boolean} True if required. */ var isDeliveryDateField = function( formRow ) { if ( ! formRow.matches( _settings.typeDeliveryDateSelector ) ) { return false; } return true; }; /** * Validate date disabled. * @param {Field} field Field for validation. */ var validateDeliveryDateDisabled = function( field, formRow ) { // Bail if field does not have a value if ( ! CheckoutValidation.hasValue( field ) ) { return { valid: false }; } var datepicker = $( _settings.datePickerSelector ).data( 'wc_od_datepicker' ).getDatepicker(); var dpg = $.fn.bootstrapDP.DPGlobal; var dateStr = $( '#delivery_date_visible' ).val(); var date = dpg.parseDate( dateStr, dpg.parseFormat( 'yyyy-mm-dd' ) ); var dateFormatted = dpg.formatDate( date, _settings.dateFormat, _settings.language ); // Bail if date is disabled if ( datepicker.dateIsDisabled( date ) ) { return { valid: false, message: _settings.validationMessages.disabled.replace( '{selected_date}', dateFormatted ) }} // Field is valid return { valid: true }; }; /** * Validate date out of range. * @param {Field} field Field for validation. */ var validateDeliveryDateOutOfRange = function( field, formRow ) { // Bail if field does not have a value if ( ! CheckoutValidation.hasValue( field ) ) { return { valid: false }; } var datepicker = $( _settings.datePickerSelector ).data( 'wc_od_datepicker' ).getDatepicker(); var dpg = $.fn.bootstrapDP.DPGlobal; var dateStr = $( '#delivery_date_visible' ).val(); var date = dpg.parseDate( dateStr, dpg.parseFormat( 'yyyy-mm-dd' ) ); var dateFormatted = dpg.formatDate( date, _settings.dateFormat, _settings.language ); var startDateFormatted = dpg.formatDate( datepicker.getStartDate(), _settings.dateFormat, _settings.language ); var endDateFormatted = dpg.formatDate( datepicker.getEndDate(), _settings.dateFormat, _settings.language ); // Bail if date is disabled if ( datepicker.dateIsDisabled( date ) ) { return { valid: false }; } // Bail if date is out of range if ( date < datepicker.getStartDate() || date > datepicker.getEndDate() ) { return { valid: false, message: _settings.validationMessages.out_of_range.replace( '{selected_date}', dateFormatted ).replace( '{start_date}', startDateFormatted ).replace( '{end_date}', endDateFormatted ) }} // Field is valid return { valid: true }; }; /** * Register validation types. */ var registerValidationTypes = function() { CheckoutValidation.registerValidationType( 'delivery_date_out_of_range', 'delivery-date-range', isDeliveryDateField, validateDeliveryDateOutOfRange ); CheckoutValidation.registerValidationType( 'delivery_date_disabled', 'delivery-date-disabled', isDeliveryDateField, validateDeliveryDateDisabled ); } /** * Initialize component and set related handlers. */ _publicMethods.init = function( options ) { if ( _hasInitialized ) return; // Bail if <code>CheckoutValidation</code> is not available if ( ! window.CheckoutValidation ) { return; } // Merge settings _settings = extend( _settings, options ); // Register validation types registerValidationTypes(); _hasInitialized = true; }; // // Public APIs // return _publicMethods; });If you need further assistance with this, please open a ticket on our support channel at:
https://support.fluidcheckout.com/portal/en/newticketBest,
Diego
The topic ‘Phone Length instant Validation’ is closed to new replies.