Javascript 如何在验证后保留表单值

Javascript 如何在验证后保留表单值,javascript,php,jquery,forms,yii,Javascript,Php,Jquery,Forms,Yii,我有以下表格: <?php echo CHtml::beginForm('','post',array('enctype'=>'multipart/form-data')); ?> <div class="form"> <?php $form=$this->beginWidget('CActiveForm', array( 'id'=>'users-form', 'enableAjaxValidation'=>true, )

我有以下表格:

<?php echo CHtml::beginForm('','post',array('enctype'=>'multipart/form-data')); ?>
<div class="form">

<?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'users-form',
    'enableAjaxValidation'=>true,
)); ?>

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

    <?php echo $form->errorSummary($model); ?>

    <div class="row">
        <?php echo $form->labelEx($model,'userName'); ?>
        <?php echo $form->textField($model,'userName',array('size'=>45,'maxlength'=>255, 'id'=>'in')); ?>
        <?php echo $form->error($model,'userName'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'password'); ?>
        <?php echo $form->passwordField($model,'password',array('size'=>45,'maxlength'=>30, 'id'=>'in')); ?>
        <?php echo $form->error($model,'password'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'firstName', array('id'=>'in0')); ?>
        <?php echo $form->textField($model,'firstName',array('size'=>45,'maxlength'=>50, 'id'=>'in1')); ?>
        <?php echo $form->error($model,'firstName'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'lastName', array('id'=>'in2')); ?>
        <?php echo $form->textField($model,'lastName',array('size'=>45,'maxlength'=>50, 'id'=>'in3')); ?>
        <?php echo $form->error($model,'lastName'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'birthDate', array('id'=>'birth0')); ?>
        <?php $this->widget('zii.widgets.jui.CJuiDatePicker',array(
                        'name'=>'publishDate',
                        'attribute'=>'birthDate',
                        'model'=>$model,
                        'language'=>'en',
                        // additional javascript options for the date picker plugin
                        'options'=>array(
                            'showAnim'=>'fold',
                            'altFormat'=>'dd-mm-yy',
                            'dateFormat'=>'yy-mm-dd',
                        ),
                        'htmlOptions'=>array('id'=>'birth'),)); ?>
        <?php echo $form->error($model,'birthDate'); ?>
        </div>

        <div class="row">
                <?php echo $form->labelEx($model,'gender', array('id'=>'in4')); ?>
                <?php echo $form->radioButton($model,'gender',array('value'=>'0', 'id'=>'in5')) . '<b id=in6 style="height:20px; color: #000666; font-size: 12pt;
                                                                                                font-weight: bold;"> Male</b><br>'; ?>
                <?php echo $form->radioButton($model,'gender',array('value'=>'1', 'id'=>'in7')) . '<b id=in8 style="height:20px; color: #000666; font-size: 12pt;
                                                                                                font-weight: bold;"> Female</b>'; ?>
                <?php echo $form->error($model,'gender'); ?>
        </div>

    <div class="row">
        <?php echo $form->labelEx($model,'idCountry'); ?>
                <?php $country=Countries::model()->findAll();
                      $countryList=CHtml::listData($country, 'idCountry' , 'cntName');
                      $url = CController::createUrl('users/selectedcity');
                      echo CHtml::activeDropDownList($model,'idCountry', $countryList,
                      array('empty'=>'choose country','id' => 'idCountry','onchange' =>
                      "selectedcountry('{$url}', 'idCountry', '#name');",'style'=>'width:300px')); ?>
        <?php echo $form->error($model,'idCountry'); ?>
    </div>

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

    <div class="row">
        <?php echo $form->labelEx($model,'securityQuestion'); ?>
        <?php $q=  Securityquestions::model()->findAll();
                      $qs=CHtml::listData($q, 'idQuestion' , 'question');
                      echo CHtml::activeDropDownList($model,'securityQuestion', $qs,array('empty'=>'Select question', 'id'=>'sec')); ?>
        <?php echo $form->error($model,'securityQuestion'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'answer'); ?>
        <?php echo $form->textField($model,'answer',array('size'=>45,'maxlength'=>255, 'id'=>'in')); ?>
        <?php echo $form->error($model,'answer'); ?>
    </div>

        <div class="row">
        <?php echo $form->labelEx($model,'email'); ?>
        <?php echo $form->textField($model,'email',array('size'=>45,'maxlength'=>255, 'id'=>'in')); ?>
        <?php echo $form->error($model,'email'); ?>
    </div>

        <div class="row">
        <?php echo $form->labelEx($model,'facebookAcc'); ?>
        <?php echo $form->textField($model,'facebookAcc',array('size'=>45,'maxlength'=>255, 'id'=>'in')); ?>
        <?php echo $form->error($model,'facebookAcc'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'twitterAcc'); ?>
        <?php echo $form->textField($model,'twitterAcc',array('size'=>45,'maxlength'=>255, 'id'=>'in')); ?>
        <?php echo $form->error($model,'twitterAcc'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'profilePhoto'); ?>
                <?php echo CHtml::radioButton('profile',false,array('value'=>'0')) . 
                                            '<b style="height:20px; color: #000666;
                                            font-size: 12pt; font-weight: bold;">
                                            Defalut</b><br>'; ?>
                <?php echo CHtml::radioButton('profile',false,array('value'=>'1')) . 
                                            '<b style="height:20px; color: #000666;
                                            font-size: 12pt; font-weight: bold;">
                                            Upload from here :</b>'; ?>
        <?php echo CHtml::activeFileField($model,'profilePhoto',array('width'=>45)); ?>
        <?php echo $form->error($model,'profilePhoto'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'website'); ?>
        <?php echo $form->textField($model,'website',array('size'=>45,'maxlength'=>500, 'id'=>'in')); ?>
        <?php echo $form->error($model,'website'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'telephone'); ?>
        <?php echo $form->textField($model,'telephone',array('size'=>45,'maxlength'=>200, 'id'=>'in')); ?>
        <?php echo $form->error($model,'telephone'); ?>
    </div>

    <div class="row buttons">
        <?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save', array('id'=>'but')); ?>
                <?php echo CHtml::resetButton('Reset', array('id'=>'but')); ?>
    </div>

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

</div><!-- form -->
<?php echo CHtml::endForm(); ?>
提交表单后,如果表单有验证错误,它将返回给用户重新填写并更正错误,但是表单没有返回其所有值,因此选中的单选按钮将返回not selected,以及dropDownList of cities,那么如果表单未提交,如何保留表单的所有值?
我希望我的问题是清楚的。

在提交时启用验证,如果表单有错误,它将不会提交表单

  'clientOptions'=>array(
     'validateOnSubmit'=>true, // Required to perform AJAX validation on form submit
   ),
将此值添加到

 $form=$this->beginWidget('CActiveForm', array(
      'id'=>'users-form',
     'enableAjaxValidation'=>true,
     'clientOptions'=>array(
         'validateOnSubmit'=>true, 
     ),
));

通常的策略是首先在客户端进行验证,如果表单无效,则不提交表单,但知道有时仍然会提交无效表单。一旦提交,它将刷新。如果要保留值,请更新表单并将其作为默认值发送回。这不是我要求的,如果表单由于验证错误返回给用户,我希望保留表单的值。因此,如果用户正确选择了国家和城市,如果表单未提交,则必须返回choosen
 $form=$this->beginWidget('CActiveForm', array(
      'id'=>'users-form',
     'enableAjaxValidation'=>true,
     'clientOptions'=>array(
         'validateOnSubmit'=>true, 
     ),
));