[英]Add/remove checkbox values to/from array when checked and unchecked (jQuery)
在我當前正在處理的項目中,我使用單選按鈕和AJAX來更改自定義WordPress模板頁面上顯示的帖子。 它可以完美地工作,但是,客戶希望它是復選框而不是單選輸入,因此,每當用戶選擇一個新類別時,它就會添加到顯示的帖子中,而不是替換它。
例如:當前,如果您單擊category1,將顯示category1帖子。 單擊category2,category2帖子替換category1帖子。 如果兩個復選框都選中,客戶端希望同時顯示category1和category2。
這是我目前的JS:
jQuery(document).ready(function ($) {
// AJAX Post Filter scripts
var $checkbox = $("#filter input:checkbox");
var $checked = $("#filter input:checkbox:checked");
var $unchecked = $("#filter input:checkbox:not(:checked)");
$checkbox.change(function () {
if ($checked) {
var catID = $(this).val();
$.ajax({
type: 'POST',
url: afp_vars.afp_ajax_url,
data: {
"action": "load-filter",
category__in: catID
},
success: function (response) {
$(".filter-section").empty().html(response);
return false;
console.log('success!');
}
});
console.log(catID);
}
});
});
我很確定我需要對我的變量catID
進行.map()
,就像我在其他一些線程中看到的那樣,但是我一直無法找到適合我的解決方案。
編輯:我意識到我需要澄清什么,我都試過了。
我使用了以下代碼:
var catID = $(this).map(function () {
return $(this).val();
}).get();
但是它所做的只是用新的復選框值替換變量值。 我需要添加到該值而不刪除已檢查的值。 然后,如果未選中復選框,則需要從數組中刪除該值。
我會嘗試這樣的事情:
let categoryIDs = [];
$('.checkbox').click((e) => {
let id = e.currentTarget.id
$(selector).html('')
categoryIDs.indexOf(id) === - 1 ? (
categoryIDs.push(Number(id))
) : (
categoryIDs = categoryIDs.filter((item) => item !== id )
)
console.log(categoryIDs)
categoryIDs.forEach((item) => {
//ajax calls here
//$.ajax({blah blah}).done(res => {
//$(selector).append(res)
//})
console.log(item);
})
})
在這里查看實際操作:
https://jsfiddle.net/mwypd9ve/
這樣,您要顯示的ID始終位於數組中,並且每次更改數組時,頁面將僅反映與數組ID相匹配的內容(因為先清除了.html('')
然后在循環附加中每個ajax響應
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.