2013-11-01 14:40:04 3765次浏览 4条回答 1 悬赏 20 金钱

使用yii确实可以很方便的生成针对model数据的验证,在rules里写好验证数组即可,但是我现在有个困惑,希望大牛赐教

我在view层启用了ajax验证,即'enableAjaxValidation'=>true,假设我有两个输入框,用户名和密码,当用户名输入框失去焦点时,我发现提交了一次ajax验证,将两个数据同时都POST到服务器进行了一次验证;当密码输入框失去焦点时,又提交了一次ajax验证,将两个数据又全部POST了一次。

我的问题是:

是否可以用户名输入框失去焦点是只POST用户名,密码输入框失去焦点时只POST密码,因为我觉得没必要两个数据都再提交验证,数据量小的时候还好,万一数据量大的时候就有点不爽了。

 

谢谢各位耐心看完,等候讲解~

 

  • 回答于 2013-11-01 16:00 举报

    你说的验证用户名密码 是想实现 登陆吗? 那么你想实现什么样的验证效果 是提交验证 还是说 光标离开焦点验证?

    1 条回复
    回复于 2013-11-01 16:09 回复

    我是指当焦点离开输入框时的验证,这个时候我不希望是全表单内容提交AJAX验证,我希望的是那个输入框失去焦点就提交哪个输入框里的内容给后台

  • 回答于 2013-11-01 16:11 举报

    你把你form表单控件的代码贴上来,我想看一看你是怎么写的,Yii 表单有三种验证,我没看到代码 但是我猜测你是 有 验证重复了. 调用表单控件的 $this->beginWidget('CActiveForm', array())部分,代码贴全.

    1 条回复
    回复于 2013-11-04 13:55 回复

    $form=$this->beginWidget('CActiveForm', array(

    'id'=>'login-form',
    'enableAjaxValidation'=>true,
    'enableClientValidation'=>true,
    'clientOptions'=>array(
    	'validateOnSubmit'=>true,
    ),
    

    ));

  • 回答于 2013-11-01 16:17 举报

    还有就是 你在 对应提交的action中加入相应的ajax代码了吗?如下

    if(isset($_POST['ajax']) && $_POST['ajax']==='user-form')
        {
            echo CActiveForm::validate($model);
            Yii::app()->end();
        }
    
    1 条回复
    回复于 2013-11-04 13:56 回复

    你说的这段代码我已经加入了~

  • 回答于 2013-12-24 18:26 举报

    为什么我的代码不能在客户端验证呢

    <?php
    Class Member extends CActiveRecord{
    public $mem_pass1;
    public static function model($className=CLASS)
    {
    return parent::model($className);
    }
    public function tableName(){
    return "{{member}}";
    }
    public function attributeLabels(){
    return array(
    'mem_name'=>'会员名称',
    'mem_pass'=>'会员密码',
    'mem_pass1'=>'确认密码',
    'mem_email'=>'注册邮箱',
    'nice_name'=>'会员昵称',
    'mem_sex'=>'会员性别'
    );
    }
    public function rules(){
    return array(
    array('mem_name','required','message'=>'会员名称必填'),
    array('mem_name','unique','message'=>'会员名称已注册'),
    array('mem_pass','required','message'=>'会员密码必填'),
    array('mem_pass1','compare','compareAttribute'=>'mem_pass','message'=>'密码与确认密码不一致'),
    array('mem_email','email','allowEmpty'=>false,'message'=>'邮箱格式不正确'),
    array('mem_email','unique','message'=>'邮箱已被注册过'),
    array('nice_name','safe'),
    array('mem_sex','in','range'=>array(1,2,3),'allowEmpty'=>false,'message'=>'请选择性别'),
    );
    }
    }
    ?>

    class MemberController extends Controller
    {
    public function actionAdd()
    {
    $member=new Member();
    if(!empty($_POST['Member'])){
    $member->attributes=$_POST['Member'];
    if($member->save()){
    echo 'success';
    exit();
    }
    }
    $this->renderPartial('add',array('member_model'=>$member,'title'=>'添加会员'));
    }
    }

    视图中

    <?php
    $form=$this->beginWidget('CActiveForm',array(
    'enableClientValidation'=>true,
    //'enableAjaxValidation'=>true,
    'clientOptions'=>array(
    'validateOnSubmit' =>true, //需要ajax验证为真,否则为假
    ),
    ));
    ?>

    <?php echo $form->labelEx($member_model,'mem_name');?> <?php echo $form->textField($member_model,'mem_name');?>
    <?php echo $form->error($member_model,'mem_name');?>

    是不是yii版本的问题啊

您需要登录后才可以回答。登录 | 立即注册
guishentan
实习生

guishentan

注册时间:2013-11-01
最后登录:2013-11-04
在线时长:1小时0分
  • 粉丝0
  • 金钱0
  • 威望0
  • 积分10

热门问题