我想要ajax验证我的表单,我遵循了工作正常的这,但是对于第一列的值,我也想让用户填充其他列,
就像选择的值是一辆车,我希望用户也填写车牌号码,但如果用户选择了自行车,我不需要那个车牌号码。
在模型验证功能之前,我已经实现了我的逻辑,但是问题在前端,如果以前不需要字段,但现在需要字段,表单将不会显示这一点。
它不会被提交,但是表单字段不会变红,错误消息也不会显示。
我怎样才能做到这一点
更新:
我还在模型规则中添加了新需要的字段,并使用$('#my-form').trigger('reset');重置表单,但是那些新需要的字段不会有红色星号来表示它们是必需的。
另外,自从我开始一个赏金,是否有任何方法来显示所有的信息,为每个领域,在他们有焦点?
发布于 2014-04-01 15:14:27
我有个主意..。你必须创造情景..。但应该有一些固定的金额,你想要验证.如您所说,您有复选框车或自行车(或收音机或下拉)选择,您可以再次加载您的表单通过ajax,在那里,您可以设置您的场景,将为设置为汽车,如果选择汽车和自行车,如果选择自行车.然后用选择的选项再次加载表单..。通过这个特定的场景,您可以动态地验证.我认为这是唯一的办法.
发布于 2014-04-03 03:27:02
解决这个问题的方法是创建场景并在客户端动态更新它们,而无需通过AJAX再次加载整个表单。
在model.php中创建如下场景:
...
public function rules(){
return array(
...
array('license_plate', 'required', 'on'=>'car'),
array('some_column', 'some_validation', 'on'=>'bike')
...
);
}
...现在,您询问是否可以根据用户的输入选择更改验证。假设用户必须从select(汽车或自行车)、值为1的汽车和值为2的自行车中进行选择。
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解决了问题:-
(将此脚本包含在视图文件中)
$(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中。我的表单中的验证错误有类“帮助块错误”,请用表单中用于显示错误的类替换它,以正确地隐藏它们。
参考资料:
我希望这能解决这个问题。
发布于 2014-03-25 10:09:36
如果我正确地理解了您,您将需要自定义验证规则而不是标准所需的规则。
https://stackoverflow.com/questions/22630415
复制相似问题