2015-02-19 3 views

ответ

1

Да, это возможно, вы должны попробовать это:

$('#form-id').yiiActiveForm('validate'); 
+0

Привет, благодарю вас за ответ. Я пробовал вышеуказанный код, но я все еще не могу выполнить проверку формы. Ошибки javascript не возвращаются, и если я попытаюсь предупредить результат, он дал мне «undefiend». – AleCat83

+0

Этот метод проверяет входные данные формы и отображает соответствующие ошибки, он ничего не вернет ... – soju

+1

Могу ли я загрузить некоторые другие конфигурации или активы, чтобы они работали? Я попытался запустить вышеуказанный код (с моим идентификатором формы), но проверка не выполняется. – AleCat83

5

Guess Я немного опоздал с ответом здесь, но я только что был один и тот же вопрос, и решение по сочжу не работает для меня тоже ,

Итак, я посмотрел немного глубже в JS-код ActiveForm и обнаружил, что он, по-видимому, контролирует состояние каждого поля в переменной, и если поле «нетронутое», проверка не запускается, за исключением того, фактическая форма. Поэтому я поменял мой звонок на это:

var $form = $("#my-form"), 
    data = $form.data("yiiActiveForm"); 
$.each(data.attributes, function() { 
    this.status = 3; 
}); 
$form.yiiActiveForm("validate"); 

Это, похоже, работает так, как я ожидаю.

+1

Я не уверен, почему это не принято, потому что это первое, что работает, как и ожидалось. – Edna

2

Благодаря голубой зет, но перед этим - для добавления поля формы, и нужно, чтобы сделать этот материал ...

// ваш вход

$inputData = $form->field($model,"prductName"); 

// это удалить следующую строку & преобразовать двойные кавычки на одинарные

$newInputData= trim(preg_replace('/\s+/', ' ',str_replace('"',"'", $inputData))); 

// затем добавить как этот

$("#table").append("'.$newInputData.'"); 

// это работает для меня вместе с синим раствором ZEND, как это ниже

$this->registerJs(' 
    $(document).on("click","input[type=text]",function(){ 
      var $form = $("#w0"), 
      data = $form.data("yiiActiveForm"); 
      $.each(data.attributes, function() { 
       this.status = 3; 
      }); 
      $form.yiiActiveForm("validate");   
    }); 
'); 
1

это работает для меня

$this->registerJs(" 
     $('body').on('beforeSubmit', 'form#product-form', function() { 
      var form = $(this); 
      // return false if form still have some validation errors 
      if (form.find('.has-error').length) { 
        return false; 
      } 
      // submit form 
      $.ajax({ 
        url: form.attr('action'), 
        type: 'post', 
        data: form.serialize(), 
        success: function (response) { 

        } 
      }); 
      return false; 
     }); "); 
5

Мы можем добиться того, что в результате слияния @BlueZed и @S Ответ Раны.

Вы можете написать ниже сценарий, поэтому мы можем проверить, что если форма имеет какие-либо ошибки в нем, тогда форма не будет отправлена ​​(Even It будет работать для табличных (волшебников), подобных форме).

var $form = $("#form"), 
     data = $form.data("yiiActiveForm"); 
    $.each(data.attributes, function() { 
     this.status = 3; 
    }); 
    $form.yiiActiveForm("validate"); 

    if ($("#form").find(".has-error").length) { 
     return false; 
    } 
0

Валидация активируется при отправке формы. Таким образом, это будет работать:

$form.data('yiiActiveForm').submitting = true; 
$form.yiiActiveForm('validate', false); 

Второй аргумент validate называется forceValidate.

0

Для проверки вручную из javascript, вы должны поместить следующий код в конец формы отправить событие.

return $('#your-form-id').yiiActiveForm('validate'); 

Для начинающих пользователей,

$('#your-form-id').submit(function() {  
    return $('#your-form-id').yiiActiveForm('validate'); 
}); 

Также обратите внимание, что вы должны указать идентификатор формы на ActiveForm, как показано ниже

<?php $form = ActiveForm::begin(['id' => 'd4d-hub-form']); ?> 
1

Я была такая же проблема. И явное разрешение в официальной документации я не понимаю, и я не знаю, почему какое-либо решение для Stackoverflow не работает для меня. Может быть в разных версиях yii2 есть разные способы сделать это. Я потратил много времени, чтобы найти решение. В моем случае я вызвал проверки для отдельного входа в форме:

$('#form-id').data('yiiActiveForm').submitting = false; 
$('#form-id').yiiActiveForm('validateAttribute', 'input-id'); //this will triger validation for input with id 'input-id' 
$('#form-id').yiiActiveForm('validateAttribute', 'other-input-id'); //this will triger validation for input with id 'other-input-id' 

пожалуйста обратите внимание второй параметр функции yiiActiveForm() не селектор, и это не имя атрибута является идентификатор ввода атрибута! !!

Смежные вопросы