Javascript push только для многомерного массива отмечены флажками
У меня есть флажки на странице, и я хочу POST только проверенные значения onchange каждый флажок
$(function () {
$('.list input').change(function (e) {
//e.preventDefault();
var favorite = [];
$.each($(".list input[type='checkbox']:checked"), function () {
favorite[$(this).attr("name")].push = $(this).val();
});
var str;
str = $.param(favorite);
$.ajax({
url: '/schema.asp',
type: 'POST',
data: str,
dataType: 'text',
success: function (response) {
alert(response);
}
});
});
});
Но я не могу сделать правильный синтаксис, чтобы подтолкнуть проверено в массив
$.each($(".list input[type='checkbox']:checked"), function () {
favorite[$(this).attr("name")].push = $(this).val();
});
Пожалуйста, покажите правильный путь.
$ (this).attr ("name") может отличаться от (Make[],Model[],Year()) и должно быть строкой
РЕШИТЬ:
Поскольку никто не отвечает с полным ответом, это последний рабочий код
$(function () {
$('.list input').change(function (e) {
//e.preventDefault();
var favorite = {};
$.each($(".list input[type='checkbox']:checked"), function(){
if(typeof(favorite[$(this).attr("name")]) == 'undefined'){
favorite[$(this).attr("name")] = [];
}
favorite[$(this).attr("name")].push($(this).val());
});
var str;
str = $.param(favorite);
$.ajax({
url: '/schema.asp',
type: 'POST',
data: str,
dataType: 'text',
success: function (response) {
alert(response);
}
});
});
});
2 ответа
Решение
push - это вызываемая функция, а не свойство, которое нужно установить
var favorite = {};
$.each($(".list input[type='checkbox']:checked"), function(){
if(typeof(favorite[$(this).attr("name")]) == 'undefined'){
favorite[$(this).attr("name")] = [];
}
favorite[$(this).attr("name")].push($(this).val());
});
Кроме того, обратите внимание выше, вам нужно проверить, было ли установлено это свойство для объекта или нет, чтобы инициализировать его как массив.
$('.list input').change(function(e) {
//e.preventDefault();
var favorite = [];
$.each($(".list input[type='checkbox']:checked"), function(){
if(typeof(favorite[$(this).attr("name")]) == 'undefined'){
favorite[$(this).attr("name")] = [];
}
favorite[$(this).attr("name")].push($(this).val());
});
console.log(favorite);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<ul class="list">
<li>
<input type="checkbox" name="one" value="1" />
</li>
<li>
<input type="checkbox" name="two" value="2" />
</li>
<li>
<input type="checkbox" name="one" value="1" />
</li>
<li>
<input type="checkbox" name="two" value="2" />
</li>
<li>
<input type="checkbox" name="one" value="1" />
</li>
</ul>
Используйте map() в jquery. Переведите все элементы в массиве или объекте в новый массив элементов.
favorite = $(".list input[type='checkbox']:checked").map(function () {
var obj = {};
obj[$(this).attr("name")] = this.value;
return obj;
}).get();