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

在Laravel中实现select选项切换时同步更新div与input字段的关联值

Laravel动态选择项关联数据展示解决方案

这里给你两种可行实现方案,可根据你的项目数据量级选择:


方案1:前端预存全量Offer数据(无额外接口请求,适合Offer数量少的场景)

该方案无需新增后端接口,直接把所有Offer数据序列化后存在前端,切换选择时直接本地匹配数据即可,实现最简单。

1. 修正Blade模板代码

<select name="offer_id" id="offer" class="form-control">
    <option value=""> Select Offer</option>
    @foreach ( $offers as $row )
    <option value="{{ $row->id }}">{{ $row->name }}</option>
    @endforeach
</select>
<div id="offer-details"></div> 
<input type="text" value="" id="offer-recharge" />

<!-- 注入全量Offer数据到前端 -->
<script>
window.offers = @json($offers->keyBy('id'));
</script>

注:你原来的写法直接调用$offers->details是错误的,$offers是模型集合不是单个模型实例,会直接报错,所以初始展示区域默认留空即可

2. 添加交互JS逻辑

document.addEventListener('DOMContentLoaded', function() {
    const offerSelect = document.getElementById('offer');
    const detailsDiv = document.getElementById('offer-details');
    const rechargeInput = document.getElementById('offer-recharge');

    // 监听下拉框切换事件
    offerSelect.addEventListener('change', function() {
        const selectedId = this.value;
        if (selectedId && window.offers[selectedId]) {
            // 选中选项时填充对应数据
            const selectedOffer = window.offers[selectedId];
            detailsDiv.textContent = selectedOffer.details;
            rechargeInput.value = selectedOffer.recharge;
        } else {
            // 未选中时清空内容
            detailsDiv.textContent = '';
            rechargeInput.value = '';
        }
    });
});

input默认就支持用户自定义输入,只要你不添加readonly属性即可,用户修改后的值不会影响预存的原始数据


方案2:AJAX异步请求拉取数据(适合Offer数量多的场景)

如果Offer表数据量很大,预存全量数据会增加页面体积,可选择切换选项时异步请求后端拉取对应数据。

1. 新增路由

在routes/web.php中添加对应接口路由:

Route::get('/api/offer/{id}', [YourController::class, 'getOffer'])->name('api.offer.get');

将YourController替换为你当前使用的控制器类名

2. 控制器新增对应方法

public function getOffer($id)
{
    return response()->json(Offer::findOrFail($id));
}

3. 调整JS逻辑

document.addEventListener('DOMContentLoaded', function() {
    const offerSelect = document.getElementById('offer');
    const detailsDiv = document.getElementById('offer-details');
    const rechargeInput = document.getElementById('offer-recharge');

    offerSelect.addEventListener('change', async function() {
        const selectedId = this.value;
        if (!selectedId) {
            detailsDiv.textContent = '';
            rechargeInput.value = '';
            return;
        }
        try {
            const res = await fetch(`/api/offer/${selectedId}`);
            const offer = await res.json();
            detailsDiv.textContent = offer.details;
            rechargeInput.value = offer.recharge;
        } catch (e) {
            alert('获取套餐信息失败,请重试');
        }
    });
});

内容的提问来源于stack exchange,提问作者Jahidul Islam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:24:03