2016-03-08 9 views
1

yii.activeForm.js помогает проверять на стороне клиента и разрешать или запрещать отправку формы. Onclick, активная форма вызывает функцию submitForm: function() автоматически.Это хорошая идея, чтобы изменить yii.activeForm.js, если нет, что является альтернативным способом?

Теперь я хочу изменить текст кнопки активной формы на «обработку» во время проверки и отключить кнопку при успешной проверке, чтобы предотвратить двойной щелчок.

Я немного изменил (вручную включил 4 строки) файл yii.activeForm.js, и он хорошо работает, как мне это нужно.

submitForm: function() { 

    var oldtext= $('#smartbtn').text(); // manually included 
    $('#smartbtn').text('Processing...'); // manually included 

     var $form = $(this), 
      data = $form.data('yiiActiveForm'); 

     if (data.validated) { 
      // Second submit's call (from validate/updateInputs) 
      data.submitting = false; 
      var event = $.Event(events.beforeSubmit); 
      $form.trigger(event); 
      if (event.result === false) { 
       data.validated = false; 
       submitFinalize($form); 
       return false; 
      } 
      updateHiddenButton($form); 

      $('#smartbtn').attr('disabled', 'disabled');// manually included 

      return true; // continue submitting the form since validation passes 
     } else { 

      $('#smartbtn').text(oldtext); // manually included 

      // First submit's call (from yii.js/handleAction) - execute validating 
      setSubmitFinalizeDefer($form); 

      if (data.settings.timer !== undefined) { 
       clearTimeout(data.settings.timer); 
      } 
      data.submitting = true; 
      methods.validate.call($form); 
      return false; 
     } 
    }, 
// active form 
     <?= Html::submitButton($model->isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary' 
     ,'id'=>'smartbtn']) ?> 

Однако я считаю, что изменить файл, созданный композитором, не является хорошей практикой.

Можно ли изменить yii.activeForm.js.? если нет, то как я могу реализовать то же самое, не касаясь yii.activeForm.js.?

Я также заметил, что в каталоге web/asset есть несколько случайно названных подкаталогов и не одинаковы для двух проектов (установка).
Ex: web/assets/e67bec0b /yii.activeForm.js
Это для какой-либо цели безопасности?

спасибо.

ответ

2

Вы можете легко внести изменения в команду event от yiiActiveForm. Например, в вашем случае вы можете сделать что-то вроде этого:

+0

Я думаю, что это полезно. Я попытаюсь использовать события. благодаря –