如何使用jQuery each函数将复选框选中值存入JS对象?
问题分析与解决方案
首先你给出的目标格式存在语法错误,对象内部不能直接并列多个对象,正确的格式应该是数组(用来存储多个食物条目),比如:
food: [ {id: 1, name: 'egg'}, {id: 2, name: 'meat'} ]
你的原有代码存在两个核心问题:
- 使用
Object.assign会每次覆盖exclude_foods里的id和name属性,最终只会保留最后一个选中的复选框值 id固定为1,无法根据选中项自动递增
修正后的代码
// 初始化数组来存储选中的食物项 var exclude_foods = []; jQuery('input[name=exclude_food]:checked').each(function(index){ // index从0开始,所以id用index+1实现递增 exclude_foods.push({ id: index + 1, name: jQuery(this).val() }); }); // 最终可以把数组赋值给food对象 var food = { items: exclude_foods }; // 或者如果直接要food作为数组:var food = exclude_foods;
补充说明
- 如果你的复选框本身带有
data-id属性(比如<input type="checkbox" name="exclude_food" value="egg" data-id="1">),可以直接用该属性作为id,替换index+1为jQuery(this).data('id'),这样id更准确 - 若你确实需要
food是一个包含多个键值对的对象(而非数组),可以用选中项的id作为键,比如:
var food = {}; jQuery('input[name=exclude_food]:checked').each(function(index){ var id = index + 1; food[id] = { id: id, name: jQuery(this).val() }; }); // 结果:food = { 1: {id:1, name:'egg'}, 2: {id:2, name:'meat'} }
内容的提问来源于stack exchange,提问作者Rajan CK
相关产品推荐
相关产品推荐

