嘿开发人员我正在构建一个应用程序表单,用户将数据输入到不同的字段中。该应用程序的一部分是来自https://github.com/wbraganca/yii2-dynamicform的动态表单。现在在动态表单内部我有一个依赖下拉,但是当我单击[+]符号时,依赖下拉列表会更改第一行而不是第二行的数据。
这是我的代码。
在我的控制器中
public function actionLists($name)
{
$countHs= Hs::find()
->where(['hscode'=> $name])
->count();
$Hs = Hs::find()
->where(['hscode'=> $name])
->all();
if($countHs > 0)
{
foreach ($Hs as $H)
{
echo "<option value='".$H->hsproduct."'> ".$H->hsproduct."</option>";
}
}else{
echo "<option> - </option>";
}
}
和我的表格
<div class="col-sm-6" style="width: 135px">
<?= $form->field($modelsItems, "[{$i}]hscode")->dropDownList(
ArrayHelper::map(Hs::find()->all(),'hscode','hsproduct'),
[
'prompt'=>'',
'onchange'=>
'$.get( "'.Url::toRoute('/hs/lists').'", { name: $(this).val() })
.done(function( data ) { $( "#'.Html::getInputId($modelsItems, "[{$i}]hsproduct").'" ).html( data ); } );'
])->label('HS.Code');
?>
</div>
<div class="col-sm-6" style="width: 135px">
<?= $form->field($modelsItems, "[{$i}]hsproduct")->dropDownList(
ArrayHelper::map(Hs::find()->all(),'hsproduct','hsproduct'),
[
'prompt'=>'',
])->label('HS.Product');
?>
</div>
我是新手,对不起我的英文
答案 0 :(得分:2)
针对您的案例进行了更新。
我所做的是在JS文件var i
中声明了全局变量并分配了0
。在第一个事件被触发后,我将变量i
增加一个。现在它在内存中包含1个。下次需要1并再次添加1。等等:
var i = 0;
$(document).on('change', 'select', function(e) {
i++;
})
请注意,只有在每行选择一次并且不会返回特定行时,这才有效。如果你想做类似的事情,你应该获取元素ID的数字,解析为浮点数(而不是字符串)并将该数字用于你的事件脚本。
parseFloat($('#hs-0-hscode')[0].id.split('-')[1])
留下一个额外的解决方案(但不是根据你的解决方案)。以防万一。
使用Inspect source
查找输入字段的名称(名称或ID)。比方说,我们有name="hs-0-hscode"
。这只是为了你的jQuery:
$(document).on('change', 'select', function(e) {
if ($(this)[0].id.indexOf('hscode') > 0) {
// Now you can use Ajax to get a list of items you want to show.
// Element itself can be reached: $(this).parent().parent().parent().children().eq(1);
// For example:
// var data = $.parseJSON(results);
// $.each(data, function(key, value) {
// $('#client-company_size')
// .append($("<option></option>")
// .attr("value", key)
// .text(value));
// });
}
});