2012-04-11 29 views
0

Es gibt eine Seite mit einem Link innerhalb des "body" -Tags.
Wenn der Link eingefügt wird, wird die folgende Ansicht in fancybox gerendert.Yii clientseitige Validierung funktioniert nicht

<div class="form"> 
    <?php 
       $model = new User; 
     $model->scenario='registration'; 
     $form=$this->beginWidget('CActiveForm', array(
     'id'=>'signup-form', 
       'action'=>'/signup/', 
     'enableClientValidation'=>true, 
     'clientOptions'=>array(
      'validateOnSubmit'=>true, 
     ), 
    )); ?> 

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

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

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


     <div class="row buttons"> 
      <?php echo CHtml::submitButton('sign up',array('name'=>'submit')); ?> 
     </div> 

    <?php $this->endWidget(); ?> 
    </div><!-- form --> 

Wenn der obige Code ohne fancybox Skript der Client-Validierung eingesetzt ist richtig eingesetzt ist, aber wenn in fancybox gibt es keine jQuery Validierungsfunktionen auf der Seite eingefügt.
Was kann das Problem sein?
(siteController-Code wird hier absichtlich eingefügt)

Antwort

1

Ihr Problem ist höchstwahrscheinlich, wie Sie das HTML an Fancybox senden. Wenn Sie renderpartial machen (wie von user1248203 angedeutet), müssen Sie sicherstellen, dass renderPartial die gesendete Ansicht nachbearbeitet (die Nachbearbeitung umfasst Javascript/CSS-Dateien, die zusammen mit der Ansicht gerendert werden sollen).

Mehr Infos auf der CController page

Eine andere Sache zu beachten: Wenn Sie die Nachbearbeitung zu tun, müssen Sie sicherstellen, dass die Javascript für Ihren Fancybox (und möglicherweise jQuery, etc.) nicht gesendet wird, wieder zurück. Es kann einige wirklich verwirrende Probleme verursachen. Um die zu verhindern, dass Dateien über Ajax erneut gesendet, verwenden Sie diese:

Yii::app()->clientScript->scriptMap['jquery.js'] = false; 
Yii::app()->clientScript->scriptMap['jquery.min.js'] = false; 
Yii::app()->clientscript->scriptMap['jquery-ui.min.js'] = false; 
etc. 

Beachten Sie auch, dass jquery.js gesendet wird, wenn Sie auf einem Dev-Server debuggen (mit YII_DEBUG auf true gesetzt), aber jquery. min.js wird auf Produktionsservern gesendet (wobei YII_DEBUG auf false gesetzt ist). Das ist gebissen mich :-) Sie können es in framework/web/js/packages.php

+0

definiert haben Sie haben Recht: renderPartial Postprozess wurde nicht festgelegt (und der Standardwert ist falsch) – lvil

+0

Froh, dass geholfen hat – acorncom

0

Wird der Code von einem Ajax-Aufruf (renderPartial) aufgerufen oder heißt es direkt? Ajax-Aufrufe (renderPartial) tun nicht enthalten die JavaScript-Validierungsfunktion, nur die ganze Seite tut.

Verwandte Themen