【问题标题】:Client Validation error does not prevent submit & ajax request客户端验证错误不会阻止提交和 ajax 请求
【发布时间】:2012-04-30 14:58:44
【问题描述】:

我使用 Yii 客户端验证来验证一些输入,当用户输入出现错误时,Yii 客户端验证不会阻止提交,也不会阻止 ajax 请求。 我使用网格小部件“carvw-grid”,当用户单击提交按钮时,它会发出 ajax 请求以更新“carvw-grid”内容和结果。当出现客户端验证错误时,我想阻止提交和 ajax 请求。

这是我的脚本代码:

Yii::app()->clientScript->registerScript('search', "
$('.search-button').click(function(){
$('.myloading').show();
$('.myshow').hide();
$('.myresult').slideUp().delay(3000).queue(function() {
    $(this).show();
    $('.myloading').hide();
    $('.myloading').addClass('myshow');
    });
    });

$('.search-form form').submit(function(){
    $.fn.yiiGridView.update('carvw-grid', {
        data: $(this).serialize()
    });
    return false;
});
");

这是我的表格

<?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'carvw-form',
    'action'=>Yii::app()->createUrl($this->route),
    'method'=>'get',
    'enableAjaxValidation'=>false,
    'enableClientValidation'=>true,
    'focus'=>array($model,'OWNER_ID'),
    'clientOptions' => array('validateOnSubmit'=>true, 'validateOnType'=>true),

)); ?>

这是我的提交按钮

<div class="row buttons">
    <?php echo CHtml::submitButton('search',array('class'=>'search-button')); ?>
</div>

这是我的网格

<?php 
    $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'carvw-grid',
    'dataProvider'=>$model->search(),

    'columns'=>array('CAR_COMPANY_NAME','MODEL_YEAR',
        'CAR_COLOR_NAME',
        'USING_TYPE_NAME',array(
            'class'=>'CButtonColumn',
        ),
    ),
));

 ?>

如何防止客户端验证错误的提交和 ajax 请求?

【问题讨论】:

  • 我从来没有接触过 Yii,但我会不会对 'enableAjaxValidation'=&gt;false, 这条线提出质疑?
  • 我没有使用ajax验证,我只使用客户端验证,ajax请求用于获取搜索结果。
  • 你打电话给$form-&gt;error($model, 'field')吗? yiiframework.com/doc/api/1.1/CActiveForm#c5223
  • 是的,我称之为,验证没有问题!,客户端验证错误并不能阻止提交和ajax请求的问题

标签: php ajax jquery yii


【解决方案1】:

也许你需要使用 afterValidate 函数而不是绑定提交事件。在 CActiveForm.clientOptions 数组中添加以下元素:

'afterValidate' => 'js:afterValidate',

在您的 javascript 文件中:

function afterValidate(form, data, hasError) {
    if (!hasError) {    
        $.fn.yiiGridView.update('carvw-grid', {
            data: $(this).serialize()
        });
    }
    return false;
}

【讨论】:

  • 感谢您的评论,但遗憾的是,这无助于解决我的问题。
  • 你们有现场网站,我们可以在那里检查发生了什么?还有你的 Yii 版本是什么?
  • afterValidate 工作正常。此外,如果您手动指定输入的 id,则应为 $form-&gt;error 指定 inputID。检查这个:link。希望对您有所帮助。
  • 问题通过您的代码稍作修改解决了我使用 data: $('.search-form form').serialize() 而不是 $(this).serialize() 它像发条一样工作,非常感谢你,你太棒了:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-23
  • 1970-01-01
  • 2015-06-08
  • 2019-08-22
相关资源
最近更新 更多