#javascript #jquery #checkbox
#javascript #jquery #флажок
Вопрос:
в приведенном ниже примере мне нужно, чтобы первый флажок был checked
, а второй и третий были unchecked
в настоящее время я получаю их все checked
let data = {"admin":"true","nts":"false","chat":"false"};
$('button').on('click', function(){
$('.bcheck').each(function(){
let x = $(this).attr('data-x');
$(this).attr('checked', data[x]);
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type='checkbox' class='bcheck' data-x='admin'>
<input type='checkbox' class='bcheck' data-x='nts'>
<input type='checkbox' class='bcheck' data-x='chat'>
<button>CLICK</button>
Ответ №1:
Все ваши значения в data
объекте являются строками. Таким образом, все они будут оцениваться true
как . Потеряйте строки и сделайте их логическими.
let data = {
"admin": true,
"nts": false,
"chat": false
};
$('button').on('click', function() {
$('.bcheck').each(function() {
let x = $(this).attr('data-x');
console.log(data[x]);
$(this).attr('checked', data[x]);
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type='checkbox' class='bcheck' data-x='admin'>
<input type='checkbox' class='bcheck' data-x='nts'>
<input type='checkbox' class='bcheck' data-x='chat'>
<button>CLICK</button>
Комментарии:
1. на самом деле я получаю
data
из вызова ajax, поэтому значения заключены в кавычки. Как удалить кавычки из значений в результирующем объекте?
Ответ №2:
Строка "false"
не является ложной (попробуйте !!"false" === true
в консоли). Можете ли вы изменить строки на обычные логические значения ( false
)?
РЕДАКТИРОВАТЬ это должно сделать это:
let transformedData = {};
const dataEntries = Object.entries(data).map((entry) => {
return { [entry[0]]: !(entry[1] === "false") };
});
for (const entry of dataEntries) {
transformedData = { ...transformedData, ...entry };
}
Комментарии:
1. на самом деле я получаю
data
из вызова ajax, поэтому значения заключены в кавычки. Как удалить кавычки из значений в результирующем объекте?2. вы могли бы написать функцию, которая сопоставляется
"false"
сfalse
:const convertStringToBool = (value) => !(value === "false")
и выполняет циклObject.values(data)
, выполняяconvertStringToBool
каждое значение. конечно, это работает только в том случае, если вы ожидаете"true"
или"false"
— вам может потребоваться обработать другие случаи3. я отредактировал свой ответ, дайте мне знать, если это сработает для вас