#javascript #php #arrays #laravel #split
#javascript #php #массивы #laravel #разделение
Вопрос:
У меня есть список lat / lng, хранящийся в БД
Если флажок установлен, я получаю значение в массиве name='checkbox[]'
.
Рассмотрим мой HTML:
<input type="checkbox" value="123,456" />
<input type="checkbox" value="789,1011" />
Я хотел бы получить результирующие данные в этой форме (массив объектов)
[
{lat: "123", lng: "456"},
{lat: "789", lng: "1011"}
]
Я попробовал это, но он не разделяет и не сохраняет данные в lat
и lng
$(document).ready(function() {
var tmp = [];
$("input[name='checkbox[]']").change(function() {
var checked = $(this).val();
if ($(this).is(':checked')) {
tmp.push(checked);
const [lat1[], lon1[]] = tmp.split(',');
} else {
tmp.splice($.inArray(checked, tmp), 1);
}
});
$('#show_all_point').on('click', function() {
alert(lat1, lon1);
});
});
Комментарии:
1. Вы имеете в виду…
[{lat:0, lng:0}, {lat:0, lng:0}]
2. [{широта: 123, спг:456}, {широта: 789, спг:1011}]
3.PS ваш ввод не имеет
name
«флажка», аtype
Ответ №1:
Создайте повторно getPoints()
используемую функцию, которая использует элементы jQuery .filter()
с :checked
помощью селектора:
function getPoints() {
return $(":checkbox").filter(":checked").get().reduce((a, el) => {
const ll = el.value.split(",");
a.push({lat:ll[0], lng:ll[1]});
return a;
}, []);
}
$('#show_all').on('click', function () {
const points = getPoints();
alert(JSON.stringify(points, null, 4))
});
<input type="checkbox" value="123,456" />
<input type="checkbox" value="789,1011" />
<button id="show_all">SHOW SELECTED POINTS</button>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>