Вы можете использовать filter
, передав функцию сравнения.
// Reset state
let $checkbox = $('input:checkbox').prop('checked', false);
let valuesToCheck = ['1', '4'];
$checkbox.filter(function() {
return valuesToCheck.includes(this.value)
}).prop('checked', true);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="checkbox" value="1">
<input type="checkbox" value="2">
<input type="checkbox" value="3">
<input type="checkbox" value="4">
<input type="checkbox" value="5">
То же самое, используя синтаксис функции стрелки (вы не можете полагаться на «this» для установки)
$checkbox.filter((i, e) => valuesToCheck.includes(e.value)).prop('checked', true);
Некоторые комментариио вашем исходном коде:
- Вы не нуждаетесь в
> 0' in your
if` выражении, так как '0' - значение Фолси. - Вам не нужно
if
вообще, поскольку условие в for
никогда не будет истинным и никогда не будет выполнено. - Внутри
for
вы конвертируете коллекцию jQuery в коллекцию jQuery.Нет необходимости, просто используйте checkbox
. - Наконец, вы пытаетесь
find
элемент input
внутри коллекции, состоящей из input
элементов, так что вы ничего не найдете.Вы должны использовать checkBox.filter(...)
.
Соберите все вместе:
function reject(el) {
const $checkBox = $(el).find('input:checkbox');
for (let j=0;j<tempStore.checks.length;j++) {
$checkBox.filter((i,e) => e.value == tempStore.checks[j]).prop('checked', true)
}
}
}