我正在使用以下代码自动填充来自另一个表的数据,该表运行良好。
<?php
$this->registerJs("$('#otinstrumententry-0-instrument_name').on('change',function(){
$.ajax({
url: '".yii\helpers\Url::toRoute("ot-note/instrument")."',
dataType: 'json',
method: 'GET',
data: {id: $(this).val(),
},
success: function (data, textStatus, jqXHR) {
$('#otinstrumententry-0-instrument_code').val(data.instrument_code);
},
error: function (jqXHR, textStatus, errorThrown) {
console.log('An error occured!');
alert('Error in ajax request');
}
});
});");
?>
我现在面临的问题是我正在添加重复字段,其中id是动态生成的,因此我的解决方案仅适用于第一行,而连续行的字段ID更改为
#otinstrumententry-1-instrument_name
和#otinstrumententry-2-instrument_name
也
#otinstrumententry-1-instrument_code
和#otinstrumententry-2-instrument_code
我如何解决这个问题。
我添加行的代码是这样的:
<div id="instrument_entry">
<h3>Instruments Used</h3>
<?php $id = 0; ?>
<?php foreach ($otinstrumentModels as $otinstrument) { ?>
<div id="language" class="work-data-pad brdr-work marbtm10 row">
<div class="col-md-4">
<?= $form->field($otinstument, '[' . $id . ']' . 'instrument_name')->DropDownList(ArrayHelper::map(\app\models\Instrument::find()->all(), 'id', 'instrument_name' ),
[ 'prompt' => 'Please Select' ])?>
</div>
<div class="col-md-2">
<?= $form->field($otinstrument, '[' . $id . ']' . 'instrument_code')->textInput(['maxlength' => 255]) ?>
</div>
<div class="col-md-1">
<?= $form->field($otinstrument, '[' . $id . ']' . 'hrs_time')->textInput(['maxlength' => 255])->label('Hrs-Time') ?>
</div>
<div class="col-md-2">
<?= $form->field($otinstrument, '[' . $id . ']' . 'total_charges')->textInput(['maxlength' => 255]) ?>
</div>
<?php ?>
<div style="margin-top: 30px;" class="col-md-3 <?php echo ($id < 1) ? 'dnone' : 'dblock'; ?>" id="divDelete" class="row-fluid">
<a class="ft11 btn-remove" onclick="deleteSection(this, 'instrument_entry');"><span class="marleft18">Remove</span></a>
</div>
</div>
<?php $id++; ?>
<?php } ?>
</div>
提前感谢您提出建议或任何替代解决方案。
修改
最初,ajax根本没有为后续字段触发,但在更改代码后 -
$this->registerJs("$(document).on('change','.form-control',function(event)
现在它正在发送数据,但我仍然坚持填写当前字段中的数据,因为它仍然没有选择动态添加的字段,而是在第一行中更改了数据。
答案 0 :(得分:0)
添加所有字段css类。并$('.className').on('change'...
答案 1 :(得分:0)
使用 \ yii \ helpers \ Html :: getInputId($ model,&#39; attribute&#39;)。
getInputId() 公共静态方法
为指定的属性名称或表达式生成适当的输入ID。
此方法将结果getInputName()转换为有效的输入ID。例如,如果getInputName()返回Post [content],则此方法将返回post-content。
public static string | array getInputId($ model,$ attribute)
示例:
<?= Html::getInputId($model, 'attribute') ?>
Dinamically:
<?= Html::getInputId($model, '['.$index.']attribute') ?>