Home / Admin / Number slider validation for multi page forms
Duplicate Snippet

Embed Snippet on Your Site

Number slider validation for multi page forms

This snippet outputs a small script that listens for the wpformsBeforePageChange event and stops the page change if the slider value is below your minimum.

<10
Code Preview
php
<?php
/**
 * Prevent moving to next page if Number Slider value is below a threshold.
 *
 * Outputs inline JS in the footer for the target form.
 */
add_action('wpforms_wp_footer_end', function () {
    // where 1520 is the form ID and 1 is the field ID
    $form_id = '1000';
    $field_id = '1';
    $slider_min = 10; // Set the minimum allowed value here
    ?>
    <script type="text/javascript">
        (function($){
            // IDs and min value for easy changes
            var formId = '<?php echo esc_js($form_id); ?>';
            var fieldId = '<?php echo esc_js($field_id); ?>';
            var sliderMin = <?php echo (int) $slider_min; ?>;
            var $form = $('#wpforms-form-' + formId);
            var $slider = $('#wpforms-' + formId + '-field_' + fieldId);
            if (!$form.length || typeof window.wpforms === 'undefined') return;
            var errorLabelHtml = function(min) {
                return '<label class="wpforms-error" style="margin-top:5px; display:block !important; color:#d00 !important; font-weight:600; z-index:9999;">Please select a number greater than or equal to ' + min + '.</label>';
            };
            var validateSlider = function(event, minValue) {
                minValue = typeof minValue !== 'undefined' ? minValue : sliderMin;
                var value = parseInt($slider.val()) || 0;
                $slider.removeClass('wpforms-error');
                $slider.closest('.wpforms-field').find('.wpforms-error').remove();
                if (value < minValue) {
                    if (event) {
                        event.preventDefault();
                        event.stopPropagation();
                    }
                    $slider.addClass('wpforms-error');
                    $slider.closest('.wpforms-field').append(errorLabelHtml(minValue));
                    $('html, body').animate({
                        scrollTop: $slider.offset().top - 100
                    }, 300);
                    $('.wpforms-page-next').prop('disabled', true);
                    setTimeout(function() {
                        $('.wpforms-page-next').prop('disabled', false);
                    }, 1000);
                    return false;
                }
                return true;
            };
            $form.on('wpformsBeforePageChange', function(event, formIdCheck) {
                if (formIdCheck != formId) return;
                if (!$slider.length) return;
                return validateSlider(event, sliderMin);
            });
            $('.wpforms-page-next').on('click', function(e) {
                if (!$slider.length) return;
                validateSlider(e, sliderMin);
            });
        })(jQuery);
    </script>
    <?php
}, 20);

Comments

Add a Comment