【发布时间】:2020-07-13 11:18:47
【问题描述】:
我目前有一个包含车辆库存的 json 文件。我有一个搜索页面,允许用户使用复选框过滤库存,例如品牌、型号、颜色等。
我需要将复选框值作为数组传递。例如,如果我选择 Mustang 和 Camaro 复选框,则需要为 'Model' => ['Mustang', 'Camaro']。
我尝试创建 2 个数组。一个用于键(品牌、型号、颜色)等……另一个用于每个值(Mustang 和 Camaro)。有些值可能只有一项,有些可能有几项。例如,如果我们想要所有红色 Mustang 和 Camaro,则数组应如下所示:
['Model' => ['Mustang', 'Camaro'],Color' => ['Red']];
或者,只是红色野马:
['Model' => ['Mustang'],Color' => ['Red']];
我可以循环每个复选框,并尝试将所有复选框名称 (data.id) 作为键,将第二个数组 (data.value) 作为值。如果键存在,则添加具有相同键的每个值。
var kv=[]; // Keys
var vv=[]; // Array of the values for each key.
$("[name='checkBoxItem']").each(function (index, data) {
if (data.checked) {
if(!(data.id in kv)){ // Is always called.
alert("Does't exist, adding : " + data.value);
kv.push(data.id);
vv.push(data.value);
} else {
vv.push(data.value);
}
checked.push({[kv]: vv});
}
});
我的代码返回:
Array ( [selected_values] => Array([0] => Array ([Make] => Array([0] => Mustang))))
很接近,但总是调用if(!(data.id in kv)),阻止我添加多项选择。
如果我让程序员阻止了我应该能够做的事情,我很抱歉。
【问题讨论】:
-
对数组使用
in来检查数组中的元素是不正确的。in查找键和数组键与索引相同。0 in [3]// true但3 in [3]//false。试试if( !kv.includes(data.id)) -
我尝试按照您的建议更改代码,但是使用: if( !kv.includes(data.id)) { kv.push(data.id); } 总是执行,即使 data.id 在下一次循环迭代中是相同的。再次感谢您的快速回复。关于应该如何完成,我可能还有另一个逻辑错误。感谢您的帮助。
-
是的,这将解决 if() 正常工作。老实说,您正在为
$filters混合 javascript 和 php 语法,并且不确定如何将其从 php 传递到 javascript -
抱歉,这是正确的。 if 工作正常。数组在第一次运行时总是空的,触发不存在警报。我需要以填充数组的方式生成数组,并识别过程中的重复键。如果存在重复键,则将另一个值添加到该数组。例如,添加 Model = Mustang,下一个出现的 Model,Model = Mustang,Camaro。
-
非常有助于展示如何将 php 数组传递给 javascript
标签: javascript arrays checkbox