YII2:不同activeform表单中的相同元素及其ID
YII2: identical elements in different activeform forms and their IDs
我正在使用 YII2(约会网站)构建一个项目。我有几个 "form models",我的意思是用于创建带有 activeform 的表单的模型。在某些 forms/models 中,我有相同的字段,例如 "gender" 和 "location" 字段出现在 "registration" 页面和 "profile" 页面中。只有一些字段相同,其他字段不同,所以我不能对不同的 pages/forms 使用相同的模型。
现在,问题是当我使用不同的模型创建 activerecord 表单时,字段的 ID 和 CSS 类 也不同。
例如,我有一个名为 'SignupForm' 的模型和一个名为 'EditProfileForm' 的模型。在视图(模板)中我有这样的代码
<?php $form = ActiveForm::begin(['id' => 'form']); ?>
<?= $form->field($model, 'test_field') ?>
<?php ActiveForm::end(); ?>
如果我对不同的模型执行此代码,我会得到不同的字段名称 (ID):
"editprofileform-test_field" "EditProfileForm" 型号的 ID
和
"signupform-test_field" "SignupForm" 型号的 ID。
为什么会这样?因为我想对相同的元素应用相同的 CSS 样式和 JavaScript 处理程序。对于使用不同模型生成的活动表单,有没有办法使 ID 和 CSS 类 相同?
已编辑
一种解决方案(@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 参数分配给自动完成小部件。
您可以为每个字段添加一个 class 或指定它们的 id>
<?php $form = ActiveForm::begin(['id' => 'form']); ?>
<?= $form->field($model, 'test_field')->textInput([
'class' => 'some-css-class',
'id' => 'my-id',
]) ?>
<?php ActiveForm::end(); ?>
如果您添加了 class,那么您可以在以后重复使用它们,或者在您想对 2+ 个元素使用相同的样式时使用它们。否则,你定义了id,那么框架就不会auto-generate了。
编辑
对于小部件,您需要在选项中添加 id 或 class,如下所示:
<?= $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 );
}
")
],
]) ?>
您可以对自动完成小部件执行相同的操作,例如:(对于 class 您应该使用选项)
echo AutoComplete::widget([
'name' => 'country',
'clientOptions' => [
'source' => ['USA', 'RUS'],
],
'id' = 'your_id_name'
'options' =[ 'class' => 'your_class'],
]);
我正在使用 YII2(约会网站)构建一个项目。我有几个 "form models",我的意思是用于创建带有 activeform 的表单的模型。在某些 forms/models 中,我有相同的字段,例如 "gender" 和 "location" 字段出现在 "registration" 页面和 "profile" 页面中。只有一些字段相同,其他字段不同,所以我不能对不同的 pages/forms 使用相同的模型。
现在,问题是当我使用不同的模型创建 activerecord 表单时,字段的 ID 和 CSS 类 也不同。
例如,我有一个名为 'SignupForm' 的模型和一个名为 'EditProfileForm' 的模型。在视图(模板)中我有这样的代码
<?php $form = ActiveForm::begin(['id' => 'form']); ?>
<?= $form->field($model, 'test_field') ?>
<?php ActiveForm::end(); ?>
如果我对不同的模型执行此代码,我会得到不同的字段名称 (ID): "editprofileform-test_field" "EditProfileForm" 型号的 ID 和 "signupform-test_field" "SignupForm" 型号的 ID。
为什么会这样?因为我想对相同的元素应用相同的 CSS 样式和 JavaScript 处理程序。对于使用不同模型生成的活动表单,有没有办法使 ID 和 CSS 类 相同?
已编辑
一种解决方案(@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 参数分配给自动完成小部件。
您可以为每个字段添加一个 class 或指定它们的 id>
<?php $form = ActiveForm::begin(['id' => 'form']); ?>
<?= $form->field($model, 'test_field')->textInput([
'class' => 'some-css-class',
'id' => 'my-id',
]) ?>
<?php ActiveForm::end(); ?>
如果您添加了 class,那么您可以在以后重复使用它们,或者在您想对 2+ 个元素使用相同的样式时使用它们。否则,你定义了id,那么框架就不会auto-generate了。
编辑
对于小部件,您需要在选项中添加 id 或 class,如下所示:
<?= $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 );
}
")
],
]) ?>
您可以对自动完成小部件执行相同的操作,例如:(对于 class 您应该使用选项)
echo AutoComplete::widget([
'name' => 'country',
'clientOptions' => [
'source' => ['USA', 'RUS'],
],
'id' = 'your_id_name'
'options' =[ 'class' => 'your_class'],
]);