• Yii2, как запустить валидацию формы вручную и получить результат?

    @IStrangerX
    Вопрос давнишний, но тем не менее опубликую свой вариант решения (с помощью эмулирования отправки формы).
    Нативная реализация не позволяет гибко управлять реализацией валидации форм на клиенте - всё слишком заточено на отправку одной формы.

    var validationEnabled = false,
        $form             = $('#form_id');
    
    /**
     * Validates form.
     * Note: after first successful validation of form this state of form will be cached (this is yii.activeForm.js-native feature).
     * @param {Function} callback Function as first argument passes result of validation.
     */
    function validateForm(callback) {
    
        if (!validationEnabled) {
            $form.on('submit', function () {
                var $form       = $(this),
                    yiiFormData = $form.yiiActiveForm('data');
    
                callback(yiiFormData.validated);
    
                return false;                   // we stop submitting of form (we submit only for performing of validation)
            });
    
            validationEnabled = true;           // don't use of .one(handler), because it can't prevent form submitting
        }
    
    
        $form.trigger('submit');    // this runs validation of form
    }
    
    
    // ... do something
    
    
    validateForm(function (successValidated) {
        if (successValidated) {
            // ... do something
        }
    });


    * Можно конечно еще проще обмануть виджет, типа форма отправилась (но там результат валидации выковыривать сложнее):

    $form.yiiActiveForm('data').submitting = true;
    $form.yiiActiveForm('validate');
    Ответ написан
    Комментировать