代码之家  ›  专栏  ›  技术社区  ›  hutch90

yii1 CActiveForm numberfield不接受十进制值

  •  1
  • hutch90  · 技术社区  · 7 年前

    我需要创建一个CActiveForm,允许在数字字段中输入十进制值。

    模型规则包括将该属性的integerOnly值设置为false,但问题似乎出在表单上,而不是模型的验证规则。当我尝试提交带有十进制值的表单时,它会告诉我输入一个有效值。

    消息取决于我使用的浏览器。Safari说:“输入一个有效值。”Chrome说:“请输入一个有效值。两个最接近的有效值是x和y。”其中x和y是与我输入值最接近的两个整数。

    有没有人经历过这种情况,或者有人知道如何纠正这种情况?

    以下代码与我的代码类似:

    表格

    <?php $form = $this->beginWidget('CActiveForm', array(
            'action' => Yii::app()->createUrl('person/create', array(
                    'school' => $school->id
            )),
            'method' => 'get',
            'htmlOptions' => array(
                    'class' => 'generic-form'
            )
    )); ?>
            <div class="row">
                    <div class="left field-container one-fourth">
                            <?= $form->label($person, 'name') ?>
                            <?= $form->textField($person, 'name') ?>
                    </div>
                    <div class="left field-container one-fourth">
                            <?= $form->label($person, 'height') ?>
                            <?= $form->numberField($person, 'height') ?>
                    </div>
                    <div class="left field-container one-fourth">
                            <?= $form->label($person, 'age') ?>
                            <?= $form->numberField($person, 'age') ?>
                    </div>
                    <div class="left one-fourth">
                            <?= TbHtml::submitButton('', array(
                                    'id' => 'submit-create-person',
                                    'class' => 'fa fa-plus generic-button'
                            )); ?>
                    </div>
            </div>
    <?php $this->endWidget() ?>
    

    模型

    public function rules()
    {
            return array(
                    array('school_id', 'required'),
                    array('name', 'safe'),
                    array('height', 'numerical', 'integerOnly' => false),
                    array('age', 'numerical', 'integerOnly'=>true),
            );
    }
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Nileshsinh Rathod    7 年前

    您可以在表单中使用textField而不是numberField进行验证。

    类型

    <div class="left field-container one-fourth">
         <?= $form->label($person, 'height') ?>
         <?= $form->textField($person, 'height') ?>
    </div>
    

    由于数字输入类型的不同,在不同的浏览器上会出现不同的验证错误。所有浏览器都有自己的验证。您可以通过检查元素进行检查 numberField 是数字输入类型。

    如果您有Yii 1.1.7或更高版本,则可以使用 enableClientValidation 为true或false,这将禁用浏览器验证。

    检查您的Yii版本 echo Yii::getVersion();