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

如何在forelse循环中根据单选按钮选择显示/隐藏对应div

问题解决:Laravel Forelse循环中单选按钮控制对应Div显示/隐藏失效

问题场景

在Laravel的forelse循环中为每位参会人员生成「HADIR(出席)」和「TIDAK HADIR(不出席)」单选按钮,需求是选择「不出席」时显示对应备注Div,选择「出席」时隐藏该Div。但目前仅第一个参会人员的功能正常,后续人员的单选按钮无法控制对应Div的状态。

问题根源

  • 重复ID冲突:循环中所有单选按钮和Div都使用了固定ID(radioYes、radioNo、myDIV),而HTML中ID必须唯一,document.getElementById只会获取到页面中第一个匹配的元素,导致后续元素无法被脚本识别。
  • 脚本绑定单一元素:外部脚本仅绑定了第一个元素的引用,所有操作都只会作用在第一个参会人员的Div上。

解决方案

1. 修改Laravel循环内的HTML代码

为每个循环生成的元素添加唯一ID(基于循环计数器$counter),并在点击事件中传递该计数器:

@forelse($ahli_mesyuarat as $counter => $ahli)
    <?php $counter++; ?>
    <!-- 注意:form不应嵌套在<tr>内,建议将form移至<table>外层或调整结构 -->
    <tr>
        <td>{{ $counter }}</td>
        <td align="center"><strong>({{$ahli->nama_ahli}})</strong><br>{{$ahli->Jawatan->nama_jawatan}}</td>
        <td align="center">{{$ahli->Gred->nama_gred}} <br> {{ date('d/m/Y', strtotime($ahli->tarikh_lantikan)) }}</td>

        <td><strong>
            <div class="form-group" align="center">
                <label class="col-form-label" for="hadir_{{ $counter }}">HADIR</label>
                <input style="width:9%;" type="radio" id="radioYes_{{ $counter }}" name="kehadiran[{{$counter}}]" value="Y" onClick="hideInputDiv({{ $counter }})" checked>
                                
                <label class="col-form-label" for="tidakHadir_{{ $counter }}">TIDAK HADIR</label>
                <input style="width:9%;" type="radio" id="radioNo_{{ $counter }}" name="kehadiran[{{$counter}}]" value="N" onchange="addmentor({{ $counter }})">
            </div> 

            <!-- 带唯一ID的备注Div -->
            <div id="myDIV_{{ $counter }}" style="display: none;">
                CATATAN(JIKA TIDAK HADIR):
                <textarea class="form-control" name="catatan[{{$counter}}]" cols="5" rows="5" placeholder=""></textarea><br>

                NAMA WAKIL
                <input class="form-control" type="text" name="wakil_oleh[{{$counter}}]" placeholder="NAMA PENUH WAKIL" value=""><br>

                JAWATAN WAKIL
                <select class="form-control" name="jawatan[{{$counter}}]" id="jawatan_{{ $counter }}">
                    <option label="PILIH JAWATAN WAKIL"></option>
                    <optgroup label="____________________________________________________________________">
                        @foreach ($ref_jawatan as $jawatan)
                            <option value="{{ $jawatan->id_jawatan }}">{{ $jawatan->nama_jawatan }}</option>
                        @endforeach
                    </optgroup>
                </select><br>

                GRED WAKIL
                <select class="form-control" name="id_gred[{{$counter}}]" id="id_gred_{{ $counter }}">
                    <optgroup label="PILIH GRED AHLI">
                        <option label="PILIH GRED AHLI MESYUARAT"></option>
                        <optgroup label="____________________________________________________________________">
                            @foreach ($kekananan_gred as $gred)
                                <option value="{{ $gred->id_gred }}">{{ $gred->nama_gred }}</option>
                            @endforeach
                        </optgroup>
                    </optgroup>
                </select>
            </div>
        </strong></td>
    </tr>
@empty
    <tr><td colspan="4">Tiada ahli mesyuarat dijumpai.</td></tr>
@endforelse

2. 修改外部脚本

将脚本改为接收计数器参数,通过参数拼接唯一ID来获取对应元素,实现精准控制:

<script>
    // 显示备注Div
    function addmentor(counter) {
        const radioNo = document.getElementById(`radioNo_${counter}`);
        const inputDiv = document.getElementById(`myDIV_${counter}`);
        if (radioNo.checked) {
            inputDiv.style.display = "block";
        }
    }

    // 隐藏备注Div
    function hideInputDiv(counter) {
        const inputDiv = document.getElementById(`myDIV_${counter}`);
        inputDiv.style.display = "none";
    }
</script>

额外优化提示

  • 原代码中form标签嵌套在<tr>内不符合HTML规范,建议将form移至<table>外层,避免布局问题。
  • 循环内的下拉框ID(jawatan、id_gred)也存在重复问题,已在上述代码中添加$counter后缀修正,确保表单提交时参数能正确对应到每个参会人员。

内容的提问来源于stack exchange,提问作者Aineel Zihnee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 09:26:16