我正在与YII2(约会网站)建立一个项目。我有几个"表单模型",我的意思是用于创建带有activeform的表单的模型。在某些形式/模型中,我有相同的字段,例如"性别"和"位置"字段中存在"注册"页面和"个人资料"页。只有一些字段相同,其他字段不同,因此我不能对不同的页面/表单使用相同的模型。
现在,问题在于当我使用不同的模型创建activerecord表单时,字段的ID和CSS类也不同。
例如,我有一个名为' SignupForm'和一个名为' EditProfileForm'的模型。在视图(模板)中,我有一个像这样的代码
<?php $form = ActiveForm::begin(['id' => 'form']); ?>
<?= $form->field($model, 'test_field') ?>
<?php ActiveForm::end(); ?>
如果我为不同的模型执行此代码,我会得到不同的字段名称(ID): &#34; editprofileform-test_field&#34; &#34; EditProfileForm&#34;的ID模型 和 &#34; signupform-test_field&#34; &#34; SignupForm&#34;的ID模型。
为什么会遇到这种情况?因为我想为相同的元素应用相同的CSS样式和JavaScript处理程序。有没有办法让使用不同模型生成的活动形式的ID和CSS类相同?
EDITED
一个解决方案(由@marche发布)是将ID参数添加到文本字段
<?php $form = ActiveForm::begin(['id' => 'form']); ?>
<?= $form->field($model, 'test_field')->textInput([
'class' => 'some-css-class',
'id' => 'my-id',
]) ?>
<?php ActiveForm::end(); ?>
它适用于文本输入,但我也有自动完成小部件
<?= $form->field($model, 'city')->widget(\yii\jui\AutoComplete::classname(), [
'clientOptions' =>[
'source' => new JsExpression("function( request, response ) {
$.getJSON('/my-script?country='+country_id, {
term: request.term
}, response );
}
")
],
],['id'=>'my-test-id']) ?>
如您所见,我尝试将ID参数添加到自动完成功能,但它不起作用。请告诉我如何将ID参数分配给AutoComplete小部件。
答案 0 :(得分:1)
您可以为每个字段添加一个类,或者指定其ID>
<?php $form = ActiveForm::begin(['id' => 'form']); ?>
<?= $form->field($model, 'test_field')->textInput([
'class' => 'some-css-class',
'id' => 'my-id',
]) ?>
<?php ActiveForm::end(); ?>
如果添加该类,则可以在以后重复使用它们,或者在想要使用2+元素的相同样式时使用它们。否则,您定义id,因此框架不会自动生成它。
修改强>
对于小部件,您需要在以下选项中添加id或类:
<?= $form->field($model, 'city')->widget(\yii\jui\AutoComplete::classname(), [
'options' => [
'id' => 'my-test-id',
'class' => 'my-css-class',
],
'clientOptions' => [
'source' => new JsExpression("function( request, response ) {
$.getJSON('/my-script?country='+country_id, {
term: request.term
}, response );
}
")
],
]) ?>
答案 1 :(得分:1)
您可以对自动完成小部件执行相同操作,例如:(对于课程,您应该使用选项)
echo AutoComplete::widget([
'name' => 'country',
'clientOptions' => [
'source' => ['USA', 'RUS'],
],
'id' = 'your_id_name'
'options' =[ 'class' => 'your_class'],
]);