jQuery 从复选框到数组获取复杂的多选值
jQuery get complex multiple checked values from checkbox to array
我想在选中复选框时动态显示与访问者选择相关的网站内容。在 Ajax 和 php 端发送信息没有问题。但是我无法在 jQuery.
中创建我想要的数组
HTML :
<div id="filter">
<div class="sizes">
<input type="checkbox" data-group="size_catalog" data-value="32">
<input type="checkbox" data-group="size_catalog" data-value="36">
<input type="checkbox" data-group="size_catalog" data-value="38">
<input type="checkbox" data-group="size_catalog" data-value="40">
</div>
<div class="colors">
<input type="checkbox" data-group="color_catalog" data-value="red">
<input type="checkbox" data-group="color_catalog" data-value="blue">
<input type="checkbox" data-group="color_catalog" data-value="black">
</div>
</div>
我想要的具有多个数组的对象(必须对相同的数据组进行分组):
var myArray = {size_catalog : ["32", "36", "38"], color_catalog: [red, blue]};
我当前创建一个简单数组的代码(在互联网上找到并改编):
function getChecked(){
var opts= [];
$checkboxes.each(function(){
if(this.checked){
opts.push(this.value);
}
});
return opts;
}
function updateSearch(opts){
$.ajax({
type: "POST",
url: "class.search.php",
dataType : 'json',
cache: false,
data: {filterOpts: opts},
success: function(records){
...
}
});
}
var $checkboxes = $("input:checkbox");
$checkboxes.on("change", function(){
var opts = getChecked();
updateSearch(opts);
});
updateSearch();
感谢您的帮助!
您可以通过使用 size-catalog
作为键迭代和创建一个对象,并将您推送到的数组作为值来实现。
var $checkboxes = $("input:checkbox");
$checkboxes.on('change', function() {
var obj = {};
$checkboxes.filter(':checked').each(function() {
var n = $(this).data('group'),
v = $(this).data('value');
n in obj ? obj[n].push( v ) : obj[n] = [v];
});
$.post('class.search.php', {filterOpts: obj}, 'json').done(function(records) {
});
});
那不是多维数组,而是包含 2 个不同数组的对象。如果你想要那个,那么这样的东西就是你想要的:
function getChecked() {
var sizeArray = [];
var colorArray = [];
$checkboxes.each(function() {
if ($(this).is(':checked')) {
if ($(this).data('group') == 'size_catalog')
sizeArray.push($(this).data('value'));
else if ($(this).data('group') == 'color_catalog')
colorArray.push($(this).data('value'));
}
});
return {
size_catalog: sizeArray,
color_catalog: colorArray
};
}
我想在选中复选框时动态显示与访问者选择相关的网站内容。在 Ajax 和 php 端发送信息没有问题。但是我无法在 jQuery.
中创建我想要的数组HTML :
<div id="filter">
<div class="sizes">
<input type="checkbox" data-group="size_catalog" data-value="32">
<input type="checkbox" data-group="size_catalog" data-value="36">
<input type="checkbox" data-group="size_catalog" data-value="38">
<input type="checkbox" data-group="size_catalog" data-value="40">
</div>
<div class="colors">
<input type="checkbox" data-group="color_catalog" data-value="red">
<input type="checkbox" data-group="color_catalog" data-value="blue">
<input type="checkbox" data-group="color_catalog" data-value="black">
</div>
</div>
我想要的具有多个数组的对象(必须对相同的数据组进行分组):
var myArray = {size_catalog : ["32", "36", "38"], color_catalog: [red, blue]};
我当前创建一个简单数组的代码(在互联网上找到并改编):
function getChecked(){
var opts= [];
$checkboxes.each(function(){
if(this.checked){
opts.push(this.value);
}
});
return opts;
}
function updateSearch(opts){
$.ajax({
type: "POST",
url: "class.search.php",
dataType : 'json',
cache: false,
data: {filterOpts: opts},
success: function(records){
...
}
});
}
var $checkboxes = $("input:checkbox");
$checkboxes.on("change", function(){
var opts = getChecked();
updateSearch(opts);
});
updateSearch();
感谢您的帮助!
您可以通过使用 size-catalog
作为键迭代和创建一个对象,并将您推送到的数组作为值来实现。
var $checkboxes = $("input:checkbox");
$checkboxes.on('change', function() {
var obj = {};
$checkboxes.filter(':checked').each(function() {
var n = $(this).data('group'),
v = $(this).data('value');
n in obj ? obj[n].push( v ) : obj[n] = [v];
});
$.post('class.search.php', {filterOpts: obj}, 'json').done(function(records) {
});
});
那不是多维数组,而是包含 2 个不同数组的对象。如果你想要那个,那么这样的东西就是你想要的:
function getChecked() {
var sizeArray = [];
var colorArray = [];
$checkboxes.each(function() {
if ($(this).is(':checked')) {
if ($(this).data('group') == 'size_catalog')
sizeArray.push($(this).data('value'));
else if ($(this).data('group') == 'color_catalog')
colorArray.push($(this).data('value'));
}
});
return {
size_catalog: sizeArray,
color_catalog: colorArray
};
}