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

Livewire中foreach循环内wire:click仅对首个元素生效,无法触发编辑模态框的问题求助

解决Livewire循环中仅第一个条目点击事件生效的问题

这个问题我之前也碰到过!核心原因是Livewire在循环渲染元素时,需要每个元素有唯一的wire:key属性,否则Livewire无法正确区分不同的DOM节点,导致事件绑定出现异常,只有第一个元素能正常响应。

修复步骤:给循环项添加唯一的wire:key

只需要在你的meals-plan-item容器上添加wire:key,值用每个meal的唯一ID来确保唯一性:

@foreach ($meal_plans as $meal)
    <!-- 这里添加wire:key,用meal的ID作为唯一标识 -->
    <div class="meals-plan-item" wire:key="meal-{{ $meal->id }}">
        <div class="meals-plan-item-type">
            <div class="meals-plan-item-label" wire:click="test">MEAL TYPE:</div>
            <div class="meals-plan-item-value">{{ $meal->meal_type }}</div>
        </div>
        <div class="meals-plan-item-names">
            <div class="meals-plan-item-label">MEAL NAMES:</div>
            <div class="meals-plan-item-value">{{ $meal->getMealItems() }}</div>
        </div>
        <div class="meals-plan-item-actions">
            <div class="action-button edit" wire:click="selectMealPlan({{ $meal->id }})">
                <i class="fas fa-pencil"></i>
            </div>
            <div class="action-button delete" data-toggle="modal" data-target="#deletePlan{{ $meal->id }}">
                <i class="fas fa-trash"></i>
            </div>
        </div>
    </div>
@endforeach

<script>
window.addEventListener('openEditMealModal', function() {
    alert('hello');
})
</script>

为什么这能解决问题?

Livewire内部通过wire:key来跟踪循环中的每个元素状态和事件绑定。如果没有这个唯一标识,Livewire会复用DOM元素的实例,导致后续条目的点击事件没有被正确绑定到对应的组件方法上,最终只有第一个条目能触发事件。

添加wire:key后,Livewire就能准确识别每个循环项,确保每个条目的wire:click事件都能正确触发对应的selectMealPlan方法,进而调用浏览器事件打开模态框。

内容的提问来源于stack exchange,提问作者Ihtisham Khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 04:54:09