Yii2:动态获取字段的ID

时间:2015-03-12 14:31:18

标签: javascript php jquery html yii2

我正在使用以下代码自动填充来自另一个表的数据,该表运行良好。

<?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)

现在它正在发送数据,但我仍然坚持填写当前字段中的数据,因为它仍然没有选择动态添加的字段,而是在第一行中更改了数据。

2 个答案:

答案 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') ?>