Php ActiveForm,用于断开字段验证的自定义id
我对Yii2很陌生,还有一个不愉快的问题 我在同一页创建了两个表单,如下所示Php ActiveForm,用于断开字段验证的自定义id,php,yii2,Php,Yii2,我对Yii2很陌生,还有一个不愉快的问题 我在同一页创建了两个表单,如下所示 <?php $form = ActiveForm::begin([ // make sure you set the id of the form 'id' => 'create', 'action' => $action, 'options' => ['enctype' => 'multipart/form-data']
<?php $form = ActiveForm::begin([
// make sure you set the id of the form
'id' => 'create',
'action' => $action,
'options' => ['enctype' => 'multipart/form-data']
]); ?>
<?php $form = ActiveForm::begin([
// make sure you set the id of the form
'id' => 'update',
'action' => $action,
'options' => ['enctype' => 'multipart/form-data']
]); ?>
我对两个表单字段使用相同的模型,如
<?= $form->field($action_model, 'action_name',[
'addon' => ['prepend' => ['content'=>$action_model->getAttributeLabel('action_mobile')]]
])->widget(Typeahead::classname(), [
'options' => ['placeholder' => $action_model->getAttributeLabel('action_placeholder')],
'pluginOptions' => ['highlight'=>true],
'dataset' => [
[
'local' => Json::encode( $totalLookUp['action_lookUp'] ),
'limit' => 10
]
]
])->label(false);
?>
这就是问题所在。在这种情况下,我有两个表单,具有相同的字段范围、相同的名称和相同的id。这肯定对W3C无效。另一个问题是,尽管客户端预先提交了两种表单的javascript验证,但效果都很好。typeahed小部件仅适用于第一组字段,因为它按id绑定id
如果我试图通过小部件选项指定元素id来覆盖元素id,如
<?= $form->field($action_model, 'action_name',[
'addon' => ['prepend' => ['content'=>$action_model->getAttributeLabel('action_mobile')]]
])->widget(Typeahead::classname(), [
'options' => ['id'=> $form_id.'_action_name',
'placeholder' => $action_model->getAttributeLabel('action_placeholder')],
'pluginOptions' => ['highlight'=>true],
'dataset' => [
[
'local' => Json::encode( $totalLookUp['action_lookUp'] ),
'limit' => 10
]
]
])->label(false);
?>
typeahead工作得很好,但在这种情况下验证失败,我的意思是它只是停止工作
因此,问题是,如何调整验证脚本并使用唯一的表单id。来自:
如果为输入元素设置自定义id
,则可能需要相应地调整
对于您的情况:
$form->field($action_model, 'action_name', [
'selectors' => ['input' => '#'.$form_id.'_action_name'],
'addon' => ...
谢谢工作完美!