摘要
在编辑操作中,下拉列表应显示现有值,但正由(看似)无关的onchange事件清除。
详情
在Yii2表单中,我有2个依赖的下拉列表。制作和模型。当触发make的onchange事件时,模型下拉列表会发生变化。
<?php
echo $form->field($model, 'make_id')->dropDownList(ArrayHelper::map(Make::find()->all(),'make_id','description'),
['prompt'=>'-Choose a Make-',
'onchange'=>'
$.post( "'.Yii::$app->urlManager->createUrl('/equipmentmodel/selectlist?id=').'"+$(this).val(), function( data ) {
$( "select#equipmentmodel" ).html( data );
});
']);
?>
<?php
echo $form->field($model, 'model_id')->dropDownList(ArrayHelper::map(EquipmentModel::find()->all(),'model_id','description'),
['id'=>'equipmentmodel']
);
?>
基于make选择的模型更新工作正常。
我现在添加了一个JS代码,该代码在第二个下拉列表的onchange事件上被触发,即模型。
$script = <<< JS
$(document).ready(function(){
$("#equipment-make_id").change(function(){
$(this).find("option:selected").each(function(){
if($(this).attr("value")=="$laptopType"){
$(".equipment_additional_attributes").not("#laptop_additional_attributes").hide();
$("#laptop_additional_attributes").show();
}
else if($(this).attr("value")=="$desktopType"){
$(".equipment_additional_attributes").not("#desktop_additional_attributes").hide();
$("#desktop_additional_attributes").show();
}
else{
$(".equipment_additional_attributes").hide();
}
});
return false;
}).change();
});
JS;
$this->registerJs($script);
?>
这个onchange事件处理程序的存在导致$(&#34;#equipment-make_id&#34;)重置,我看不清楚原因。从处理程序内部删除所有代码,或者甚至(仅)返回false会导致重置值。
如果我从源代码中删除事件处理函数,则第二个下拉列表的值保持不变。
选项的选定属性设置正确,如果我查看页面源代码,我可以看到这一点。
我需要保留第二个下拉列表的值,但我不确定如何,
答案 0 :(得分:0)
我发现了问题。在onchange处理程序上存在了额外的更改。
$(document).ready(function(){
$("#equipment-make_id").change(function(){
// ...code here
}).change(); // <=== THIS WAS causing the problem
});