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

PHP带编辑功能页面:Mustache模板下拉选单渲染出错求助

解决下拉选单重复渲染与选中值错误问题

问题根源

你的模板存在两个核心问题:

  1. 多嵌套了一层{{#score_list}}循环——你的数据源本身就是包含5条记录的数组,直接循环该数组即可,额外的嵌套循环导致0-15的选项被重复渲染5次。
  2. 选中值判断逻辑错误——{{#selected}}是判断当前上下文是否为真,但你的selected是具体数值(如2、8)或false,并非布尔上下文,直接使用会导致无法匹配对应分数的选中状态。

正确模板代码

假设你使用的是Handlebars类模板引擎,调整后的模板如下:

{{#each this}}
    <select name="score[{{id}}]" id="score-{{id}}">
        {{#each scores}}
            <option value="{{.}}" {{if (eq . ../selected)}}selected{{/if}}>{{.}}</option>
        {{/each}}
    </select>
{{/each}}

细节说明

  • {{#each this}}:直接循环你的数据源数组(每条记录),this指代整个数据源。
  • {{#each scores}}:循环当前记录的scores数组生成独立选项。
  • {{if (eq . ../selected)}}selected{{/if}}:通过eq辅助函数判断当前分数(.)是否等于外层记录的selected值(../selected跳出当前scores上下文,回到父级记录上下文),相等则添加selected属性。

兼容方案(若模板引擎不支持eq辅助函数)

如果你的模板引擎是原生Mustache这类不支持复杂判断的,可以提前在后端处理数据:

foreach($data as &$item) {
    $processedScores = [];
    foreach($item['scores'] as $score) {
        $processedScores[] = [
            'value' => $score,
            'isSelected' => $score == $item['selected']
        ];
    }
    $item['scores'] = $processedScores;
}

之后模板改为:

{{#each this}}
    <select name="score[{{id}}]" id="score-{{id}}">
        {{#each scores}}
            <option value="{{value}}" {{#if isSelected}}selected{{/if}}>{{value}}</option>
        {{/each}}
    </select>
{{/each}}

特殊情况处理

当selected为false时,上述逻辑会自动跳过选中状态,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 02:25:11