Laravel下拉框选值时如何填充customerNumber?是否需用jQuery?
问题分析与解决方案
你的现有代码存在几个关键问题:
- 前端不能直接执行Laravel PHP代码:
Marketing::find(val)是后端Eloquent查询语句,浏览器无法解析执行,必须通过后端接口获取数据。 - 事件绑定错误:下拉框的选项选择应该监听
change事件,而非click或keypress。 - 输入框赋值方式错误:设置输入框值应该用
val()方法,而非attr("value", ...)。
方案一:AJAX请求后端接口(适合数据量大或动态更新的场景)
1. 后端实现
首先创建路由和控制器方法,提供获取customerNumber的接口:
路由(routes/web.php)
Route::get('/customer-number/{requestId}', [CustomerRequestController::class, 'getCustomerNumber']);
控制器方法
use App\Models\Marketing; public function getCustomerNumber($requestId) { $marketing = Marketing::find($requestId); return response()->json([ 'customerNumber' => $marketing?->customerNumber ?? '' ]); }
2. 前端JS修改(jQuery版本)
<script> $("#request_id").on('change', function() { const requestId = $(this).val(); // 清空默认选项的输入框 if (requestId == 0) { $("#customerNumber").val(''); return; } $.ajax({ url: `/customer-number/${requestId}`, type: 'GET', success: function(res) { $("#customerNumber").val(res.customerNumber); }, error: function() { $("#customerNumber").val(''); alert('获取客户编号失败'); } }); }); </script>
方案二:预加载数据到选项(无AJAX,适合数据量小的场景)
如果customer_requests和Marketing是关联关系,可以直接把customerNumber预存到下拉选项的data属性中,无需后端接口:
1. 修改前端下拉框代码
<select class="form-control option" id="request_id"> <option value="0">0 - Request Number</option> @foreach ($customer_requests as $customer_request) <option value="{{$customer_request->id}}" data-customernumber="{{$customer_request->marketing->customerNumber ?? ''}}" > {{$customer_request->id}} - {{$customer_request->requestNumber}} </option> @endforeach </select>
2. 前端JS代码
<script> $("#request_id").on('change', function() { const selectedOption = $(this).find('option:selected'); const customerNumber = selectedOption.data('customernumber'); $("#customerNumber").val(customerNumber); }); </script>
是否应该使用jQuery?
完全可以用。jQuery语法简洁,对于Laravel新手来说,能快速实现DOM操作和AJAX请求,无需处理原生JS的兼容性问题。如果追求现代前端写法,也可以用原生fetchAPI替代jQuery的AJAX,但学习成本稍高。
内容的提问来源于stack exchange,提问作者Mahdie A
相关产品推荐
相关产品推荐

