我现在已经花了一天多的时间了,并且无法让它发挥作用。我想创建一个多维javascript数组,其中包含过滤器变量,必须将其转换为php以进行AJAX调用。目标是制作产品过滤器并过滤掉不适用于过滤器变量的产品。
最后一部分是php,我知道如何解决这个问题。但我正在努力创建一个包含所有选定过滤器变量的javascript数组。
我有filter_ID
和filter_value_ID
。使用过滤器(例如大小),可以有不同的值,如S,M,L,XL等。
所以我想要一个这样的数组:
filterArr = array(
[4] => array(10,20,30)
[8] => array(4)
[20] => array(2,3, 7)
)
当用户选中复选框时,必须填充数组。我几乎管理它,但问题是我在数组中得到null
个项目,因为我无法在数组中获取filterID。
我的代码在JSFiddle上:http://jsfiddle.net/VCfjp/
出错的部分在第10,11,12行:
if (!(filterID in filter)) {
filter[filterID] = [];
}
此刻我正陷入困境。我会知道如何在PHP中执行此操作,但无法在javascript中使用它。一些帮助表示赞赏! Offcourse我一直在寻找论坛上的其他主题,但找不到任何匹配的东西。
答案 0 :(得分:1)
JS中的哈希数组被定义为对象,因此请使用它:
var object = {
4: [10,20,30],
8: [4],
20: [2,3,7]
};
只需观察PHP在发布时输出的内容:
echo json_encode(array(
[4] => array(10,20,30)
[8] => array(4)
[20] => array(2,3, 7)
));
您要求的代码:
jQuery(document).ready(function($) {
var hashArray = {};
$('.myCheckbox').on('change', function() {
var self = $(this),
checkboxId = parseInt(self.attr('data-id')), // since you used it as a number above
checkboxValue = parseInt(self.val()); // since you also used it as a number above
if (self.is(':checked')) {
// add to array
if (!hashArray.hasOwnProperty(checkboxId)) hashArray[checkboxId] = [];
hashArray[checkboxId].push(checkboxValue);
}
else {
if (hashArray.hasOwnProperty(checkboxId)) {
// remove from array if it exists
hashArray[checkboxId].splice(hashArray[checkboxId].indexOf(checkboxValue), 1);
}
}
});
});