【问题标题】:CJuiDatePicker validation messages isn't workingCJuiDatePicker 验证消息不起作用
【发布时间】:2012-08-29 21:07:00
【问题描述】:

嗨。

我在 Yii 框架中遇到表单验证问题。

这是我的VIEW代码:

    <?php
$form = $this->beginWidget('CActiveForm', array(
  'id' => 'search-form',
  'enableAjaxValidation' => true,
  'enableClientValidation' => true,
  'focus' => array($model, 'ccc'),
  'clientOptions' => array(
    'validateOnSubmit' => true,
  ),
    ));
?>

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

<div class="row">
  <?php echo $form->labelEx($model, 'input'); ?>
  <?php echo $form->textField($model, 'input', array('class' => 'input-medium', 'maxlength' => 11,)); ?>
  <?php echo $form->error($model, 'input'); ?>
</div>

<div class="row">
  <?php echo $form->labelEx($model, 'date'); ?>
  <?php
  $this->widget('zii.widgets.jui.CJuiDatePicker', array(
    'attribute' => 'date',
    'name' => 'date',
    'model' => $model,
    'language' => 'ru',
    'options' => array(
      'dateFormat' => 'dd/mm/y',
      'showAnim' => 'slideDown',
      'changeMonth' => true,
      'changeYear' => true,
      'showOn' => 'button',
      'constrainInput' => 'true',
    ),
    'htmlOptions' => array(
      'style' => 'height:15px; width:6em'
    ),
  ));
  ?>
  <?php echo $form->error($model, 'date'); ?>
</div>
<?php $this->endWidget(); ?>

没什么特别的。但验证消息适用于 textField(Ajax 请求仅通过 onChange textField 发送)。

如何启用 CJuiDatePicker 验证消息?

【问题讨论】:

  • TBH 我不认为那些基于 JQueryUI 的小部件支持客户端验证。在任何情况下我都没有遇到过。它们基本上只是 JUI javascript 的包装器。您或许可以在日期小部件的选项中添加“onSelect”函数并实现您自己的 javascript 验证?
  • 是的,这就是我所害怕的。 =(

标签: ajax jquery-ui validation yii


【解决方案1】:

你只需给你的 CJuidatepicker 对象提供正确的 id,使用CHtml::getIdByName 创建 id 值,尝试那里的 html 元素的名称,它必须类似于

'id' => CHtml::getIdByName(get_class($model) . '[' . $attribute . ']')

它会变成这样:

  $this->widget('zii.widgets.jui.CJuiDatePicker', array(
    'id' => CHtml::getIdByName(get_class($model) . '[date]'),
    'attribute' => 'date',
    'name' => 'date',
    'model' => $model,
    'language' => 'ru',
    'options' => array(
       'dateFormat' => 'dd/mm/y',
       'showAnim' => 'slideDown',
       'changeMonth' => true,
       'changeYear' => true,
       'showOn' => 'button',
       'constrainInput' => 'true',
    ),
    'htmlOptions' => array(
      'style' => 'height:15px; width:6em'
    ),
  ));

【讨论】:

    【解决方案2】:

    这就是我所做的并且它有效,我认为你应该包括一个 value

    <?php echo $form->labelEx($model,'reportDate'); ?>
    <?php $this->widget('zii.widgets.jui.CJuiDatePicker', 
        array( 'model'=>$model,
        'attribute'=>'reportDate',
        **'value'=>$model->reportDate,**
         'options'=>array(
         'showButtonPanel'=>true,
         'changeYear'=>true,
         'changeMonth'=>true,
          'autoSize'=>true,
         'dateFormat'=>'yy-mm-dd',
         'defaultDate'=>$model->reportDate,
         ),
        ));
        ?>
    <?php echo $form->error($model,'reportDate'); ?>
    

    【讨论】:

    • 这个答案没有帮助,但我还是给了它赏金,因为我无法将赏金奖励给我自己的答案......
    【解决方案3】:

    wonde 的回答“你应该包含一个值”对我不起作用......

    这是有效的:

    Yii CActiveForm date validation

    views/site/login.php 原来有:

    $form=$this->beginWidget('CActiveForm', array(
    'id'=>'login-form',
    'enableClientValidation'=>true,
    'clientOptions'=>array(
        'validateOnSubmit'=>true,
    ),
    

    更改为:

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

    见: http://sky-walker.net/temp/test/yii/testdate/index.php?r=site/login

    【讨论】:

      【解决方案4】:

      只需在 CJuiDatePicker 后添加$form-&gt;error($model,'end_date') 即可解决此问题。

      $this->widget('zii.widgets.jui.CJuiDatePicker', array(
          'id' => CHtml::getIdByName(get_class($model) . '[date]'),
          'attribute' => 'date',
          'name' => 'date',
          'model' => $model,
          'language' => 'ru',
          'options' => array(
             'dateFormat' => 'dd/mm/y',
             'showAnim' => 'slideDown',
             'changeMonth' => true,
             'changeYear' => true,
             'showOn' => 'button',
             'constrainInput' => 'true',
          ),
          'htmlOptions' => array(
            'style' => 'height:15px; width:6em'
          ),
        ));
       echo $form->error($model,'dateTo');// added to enaple clint validation
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-16
        • 2019-01-15
        • 2018-12-02
        • 1970-01-01
        相关资源
        最近更新 更多