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

使用jQuery each填充不同类型表单失效问题排查

问题解决:下拉切换时只显示最后一个复选框的原因及修复方案

你遇到的问题很典型——每次循环调用$("#xe").html(...)都会完全替换掉#xe容器里的现有内容,而不是追加新的复选框。所以循环跑完后,自然只剩最后一次循环生成的那个复选框啦。

快速修复方案

把html()方法换成append(),同时在切换选项前先清空容器(避免不同选项的复选框叠加):

$('select[name="scales"]').on('change',function(e){
    e.preventDefault();
    var scale = $(this).val();
    // 切换选项前先清空容器
    $("#xe").empty();
    
    switch(scale) {
        case 'shirtscale':
            var x = ['S','M','L','XL','XXL','XXXL','4XL','5XL','6XL','7XL','8XL','9XL','10XL'];
            $.each(x, function (index, value) {
                // 用append追加元素,而非html替换
                $("#xe").append("<input id='"+index+"' type='checkbox' value='"+value+"'>");
                console.log(value);
            });
            break;
        case 'ringscale':
            var x = ['3','3.5','4','4.5','5','5.5','6','6.5','7','7.5','8','8.5','9','9.5','10','10.5','11','11.5','12','12.5'];
            $.each(x, function (index, value) {
                $("#xe").append("<input id='"+index+"' type='checkbox' value='"+value+"'>");
                console.log(value);
            });
            break;
        case 'shoescale':
            var x = ['A','B','C','D','E','F','G'];
            $.each(x, function (index, value) {
                $("#xe").append("<input id='"+index+"' type='checkbox' value='"+value+"'>");
                console.log(value);
            });
            break;
        default:
            // 默认情况清空容器
            $("#xe").empty();
    }
    return false;
});

更优雅的优化版本

上面的代码虽然能解决问题,但有很多重复逻辑。我们可以把选项配置抽成对象,先拼接完整的HTML字符串再一次性插入(减少DOM操作次数,提升性能):

$('select[name="scales"]').on('change',function(e){
    e.preventDefault();
    var scale = $(this).val();
    
    // 把所有尺寸选项统一管理
    const scaleOptions = {
        shirtscale: ['S','M','L','XL','XXL','XXXL','4XL','5XL','6XL','7XL','8XL','9XL','10XL'],
        ringscale: ['3','3.5','4','4.5','5','5.5','6','6.5','7','7.5','8','8.5','9','9.5','10','10.5','11','11.5','12','12.5'],
        shoescale: ['A','B','C','D','E','F','G']
    };
    
    $("#xe").empty();
    // 判断当前选中的scale是否有对应配置
    if (scaleOptions[scale]) {
        let checkboxHtml = '';
        scaleOptions[scale].forEach((value, index) => {
            // 用模板字符串拼接更清晰
            checkboxHtml += `<input id='${index}' type='checkbox' value='${value}'>`;
        });
        // 一次性插入所有复选框
        $("#xe").html(checkboxHtml);
    }
    return false;
});

补充说明

  • 你的页面select里还有pantscale、waistscale等选项,上面的代码在默认情况会清空容器,符合“未选中对应尺寸时不显示复选框”的预期。
  • 如果需要给复选框加上标签(比如显示尺寸文本),可以在拼接时加上<label for='${index}'>${value}</label>,让用户更直观看到选项内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 00:32:30