首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fields表单验证,需要更多基于特定字段的字段。

问fields表单验证,需要更多基于特定字段的字段。
EN

Stack Overflow用户
提问于 2014-03-25 09:34:32
回答 5查看 2K关注 0票数 2

我想要ajax验证我的表单,我遵循了工作正常的这,但是对于第一列的值,我也想让用户填充其他列,

就像选择的值是一辆车,我希望用户也填写车牌号码,但如果用户选择了自行车,我不需要那个车牌号码。

在模型验证功能之前,我已经实现了我的逻辑,但是问题在前端,如果以前不需要字段,但现在需要字段,表单将不会显示这一点。

它不会被提交,但是表单字段不会变红,错误消息也不会显示。

我怎样才能做到这一点

更新:

我还在模型规则中添加了新需要的字段,并使用$('#my-form').trigger('reset');重置表单,但是那些新需要的字段不会有红色星号来表示它们是必需的。

另外,自从我开始一个赏金,是否有任何方法来显示所有的信息,为每个领域,在他们有焦点?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-04-01 15:14:27

我有个主意..。你必须创造情景..。但应该有一些固定的金额,你想要验证.如您所说,您有复选框车或自行车(或收音机或下拉)选择,您可以再次加载您的表单通过ajax,在那里,您可以设置您的场景,将为设置为汽车,如果选择汽车和自行车,如果选择自行车.然后用选择的选项再次加载表单..。通过这个特定的场景,您可以动态地验证.我认为这是唯一的办法.

票数 1
EN

Stack Overflow用户

发布于 2014-04-03 03:27:02

解决这个问题的方法是创建场景并在客户端动态更新它们,而无需通过AJAX再次加载整个表单。

在model.php中创建如下场景:

代码语言:javascript
复制
...
public function rules(){
    return array(
        ...
        array('license_plate', 'required', 'on'=>'car'),
        array('some_column', 'some_validation', 'on'=>'bike')
        ...
    );
}
...

现在,您询问是否可以根据用户的输入选择更改验证。假设用户必须从select(汽车或自行车)、值为1的汽车和值为2的自行车中进行选择。

代码语言:javascript
复制
public function actionCreate(){
    $model = new Vehicle();
    if(isset($_POST['ajax']) && $_POST['ajax'] == 'FORM_ID'){
        if($_POST['Vehicle']['type'] == 1)
            $model->setScenario('car');
        else
            $model->setScenario('bike');
        //You can have n-number of scenarios here based upon your application.
    }
    $this->performAjaxValidation($model);
    if(isset($_POST['Vehicle']))
        $model->attributes = $_POST['Vehicle'];
    if($model->type == 1)
        $model->setScenario('car');
    else
        $model->setScenario('bike');
    //You can have n-number of scenarios here based upon your application.
}

现在,在执行此操作时,我遇到了一个错误消息不会消失的问题,即使场景发生了更改。我用这样的Javascript解决了问题:-

(将此脚本包含在视图文件中)

代码语言:javascript
复制
$(document).on('change', '#DROPDOWN_ID', function(e){
    $(':input','#FORM_ID')
        .not('#DROPDOWN_ID')
        .val('')
        .removeAttr('checked')
        .removeAttr('selected');
    $('.help-block, .error').hide(); //NOTE 1.0
    var settings = $('#FORM_ID').data('settings');
    $.each(settings.attributes, function () {
        this.status = 2;
    });
    var form = $("#FORM_ID");
    form.data('settings', settings);
    $.fn.yiiactiveform.validate(form, function (data) {
        $.each(settings.attributes, function () {
            $.fn.yiiactiveform.updateInput(this, data, $("#FORM_ID"));
        });
    });
});

请将"FORM_ID“和"DROPDOWN_ID”分别替换为表单的ID和下拉列表的ID (验证的选择取决于表单中的ID)。

附注1.0解释: 我正在使用YiiBooster,所以我的所有表单都在Bootstrap中。我的表单中的验证错误有类“帮助块错误”,请用表单中用于显示错误的类替换它,以正确地隐藏它们。

参考资料:

  1. 根据一个字段的变化验证其他字段- Yii
  2. 更改客户端的方案,而不再次加载窗体

我希望这能解决这个问题。

票数 1
EN

Stack Overflow用户

发布于 2014-03-25 10:09:36

如果我正确地理解了您,您将需要自定义验证规则而不是标准所需的规则。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22630415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档