You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel下拉框选值时如何填充customerNumber?是否需用jQuery?

问题分析与解决方案

你的现有代码存在几个关键问题:

  1. 前端不能直接执行Laravel PHP代码:Marketing::find(val)是后端Eloquent查询语句,浏览器无法解析执行,必须通过后端接口获取数据。
  2. 事件绑定错误:下拉框的选项选择应该监听change事件,而非click或keypress。
  3. 输入框赋值方式错误:设置输入框值应该用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 20:25:24