2015-07-09 14 views
6

Provo a caricare il modulo tramite ajax in CJuiDialog. Il modulo è stato caricato con successo ma quando ho inviato il modulo o scritto il testo, il modulo non è stato convalidato e non inviato. Ho provato il quarto parametro "vero" in renderPartialbut dopo che la finestra di dialogo non si apriva. In console, ho ottenuto l'erroreIl modulo non convalida e invia in data

$ (...) finestra di dialogo non è una funzione

In considerazione ho questo:.

Yii::app()->clientScript->registerScript(
     "test", 
     "jQuery.ajax({ 
       type: 'POST', 
       url: '".$this->createUrl("/Site/ShowForm")."', 
       success: function(html){ 
          $('#form-test').html(html); 
          }); 
          ", 
          CClientScript::POS_READY); ?> 
     <div id="form-test"></div> 
<?php $this->endWidget('zii.widgets.jui.CJuiDialog'); 

Le mie azioni nel controllore:

e il mio modulo (register.php)

<?php 
      $form = $this->beginWidget('CActiveForm', array(
       'id' => 'register-form', 
       //'enableClientValidation'=>true, 
       'enableAjaxValidation' => true, 
       'clientOptions'  => array(
         //'validateOnSubmit' => true, 
         'validateOnChange' => true 
       ), 
       'action' => array('site/Register'), 
      )); 
      ?> 

      <p class="note">Fields with <span class="required">*</span> are required.</p> 



      <div class="row"> 
       <?php echo $form->labelEx($model, 'first_name'); ?> 
       <?php echo $form->textField($model, 'first_name'); ?> 
       <?php echo $form->error($model, 'first_name'); ?> 
      </div> 

      <div class="row"> 
       <?php echo $form->labelEx($model, 'last_name'); ?> 
       <?php echo $form->textField($model, 'last_name'); ?> 
       <?php echo $form->error($model, 'last_name'); ?> 

      </div> 
      <div class="row"> 
       <?php echo $form->labelEx($model, 'email'); ?> 
       <?php echo $form->emailField($model, 'email'); ?> 
       <?php echo $form->error($model, 'email'); ?> 

      </div> 
      <div class="row"> 
       <?php echo $form->labelEx($model, 'password'); ?> 
       <?php echo $form->textField($model, 'password'); ?> 
       <?php echo $form->error($model, 'password'); ?> 

      </div> 
      <div class="row"> 
       <?php echo $form->labelEx($model, 'Repeat password'); ?> 
       <?php echo $form->textField($model, 'repeat_password'); ?> 
       <?php echo $form->error($model, 'repeat_password'); ?> 

      </div> 
      <div> 
       <?php echo $form->textField($model, 'verifyCode'); ?> 
       <?php $this->widget('CCaptcha'); ?> 
       <?php echo $form->error($model, 'verifyCode'); ?> 
      </div> 



      <div class="row buttons"> 
       <?php 
       echo CHtml::ajaxSubmitButton('Register', $this->createUrl("/Site/Register"), array(

        'type' => 'POST', 
        'dataType' => 'json', 
        'success' => 'js:function(data){  
            if(data == 1){ 
            window.location ="' . $this->createUrl('site/index') . '" 
            } 
         }', 
       )); 
       ?> 

        </div> 

       <?php $this->endWidget(); ?> 

Come posso risolvere questo problema?

risposta

1

Nel controller, dove si controlla se la richiesta è Ajax, si dovrebbe eseguire la convalida Ajax.

+0

Non funziona, quando inserisco questo-> ajaxValidate ($ model); in showaction dopo il metodo renderPartial ho ottenuto un testo semplice come questo "{" RegistrationForm_first_name ": [" First Name non può essere vuoto. "]," RegistrationForm_ ... ". Oltre a SwhoAction deve mostrare solo il modulo – YuriiChmil

1

Ho trovato la soluzione! Ho aggiunto

Yii::app()->clientScript->scriptMap = array(
       'jquery.js'  => false, 
       'jquery.ui.js' => false, 
       'jquery.yiiactiveform.js' => false, 
      ); 

nel mio actionShowForm.