如何获得此输出?
我想要一个动态下拉菜单,例如当我在下拉菜单中选择一个值时,该文本框应该自动用其连接的值填充
这是我的数据库值示例
例如,我在选择下拉列表中选择123
,然后文本框必须自动填充3
,我该怎么做?
这是我的代码,不能正常工作。
查看
<span>Aircraft Name</span>
<select name="aircraft_name" class="aircraftsName">
<option value="0" disabled="true" selected="true"> Select </option>
@foreach ($aircrafts as $aircraft)
<option value="{{ $aircraft->aircraft_registration_number }}">{{ $aircraft->aircraft_registration_number }}</option>
@endforeach
</select>
<span>Aircraft ID</span>
<input type="text" class="aircraft_id">
控制器
public function findPrice(Request $request){
$p=Product::select('aircrafts')->where('registred_company_name',$request->aircraft_id)->first();
return response()->json($p);
}
网络
Route::get('/admin/settings/findAirName','Admin\SettingsController@findAirName');
Ajax和Javascript
<script type="text/javascript">
$(document).ready(function(){
$(document).on('change','.aircraft_id',function(){
var air_id = $(this).val();
var a = $(this).parent();
console.log("Its Change !");
var op = "";
$.ajax({
type:'get',
url:'{!!URL::to('/admin/settings/findAirName')!!}',
data:{'id':air_id},
dataType:'json',//return data will be json
success:function(data){
// console.log("price");
console.log(data.registred_company_name);
a.find('.aircraft_id').val(data.registred_company_name);
},
error:function(){
}
});
});
});
答案 0 :(得分:0)
您在jquery中定位了错误的元素。如果要在更改选择下拉列表时更改文本框的值,则需要定位选择。在此行.aircraft_id
上将目标元素从.aircraftsName
更改为$(document).on('change', '.aircraftsName', function() {
。
此外,您无需调用控制器。您可以将aircraft_id
作为值添加到选择下拉列表中。将选择下拉列表的创建方式更新为如下所示:
<select name="aircraft_name" class="aircraftsName">
<option value="0" disabled="true" selected="true"> Select </option>
@foreach ($aircrafts as $aircraft)
<option value="{{ $aircraft->aircraft_id }}">{{ $aircraft->aircraft_registration_number }}</option>
@endforeach
</select>
然后您的jquery可能会像这样简单:
$(document).ready(function() {
$(document).on('change', '.aircraftsName', function() {
var air_id = $('.aircraftsName').val(); // get id the value from the select
$('.aircraft_id').val(air_id); // set the textbox value
// if you want the selected text instead of the value
// var air_text = $('.aircraftsName option:selected').text();
});
});
如果您想使用ajax调用,我对代码进行了一些更新:
$(document).ready(function() {
$(document).on('change', '.aircraftsName', function() {
var air_id = $(this).val();
var a = $(this).parent();
console.log("Its Change !");
var op = "";
$.ajax({
type: 'get',
url: '/admin/settings/findAirName',
data: { 'id': air_id },
dataType: 'json', //return data will be json
success: function(data) {
// console.log("price");
console.log(data.registred_company_name);
a.find('.aircraft_id').val(data.aircraft_id);
// do you want to display id or registration name?
},
error:function(){
}
});
});
});
这可能会使您更接近。由于这是一个get
请求,因此您可以将id附加到url上,而不使用数据参数:url: '/admin/settings/findAirName?id=' + air_id;
,但不要包括行data: {id: air_id}
。
答案 1 :(得分:0)
您可以这样操作:
查看
<span>Aircraft Name</span>
<select id="aircraft_name" name="aircraft_name" class="aircraftsName">
<option value="0" disabled="true" selected="true"> Select </option>
@foreach ($aircrafts as $aircraft)
<option value="{{ $aircraft->id}}">{{ $aircraft->aircraft_registration_number }}</option>
@endforeach
</select>
<span>Aircraft ID</span>
<input id="aircraft_id" type="text" class="aircraft_id">
//JS
$(document).ready(function(){
$("#aircraft_name").change(function(){
var air_id = $(this).val();
$("#aircraft_id").val(air_id );
});
});
我在id
和select
元素上添加了input