Ваша проблема заключается в том, что вы передаете строковое значение этого поля в slice()
. Вместо этого вам нужно указать числовой индекс элемента для удаления в массиве. Вы можете использовать indexOf()
, чтобы получить, что:
var uLIndex = [];
function doSomething(cb) {
if ($(cb).is(":checked")) {
uLIndex.push(cb.value);
console.log(uLIndex);
} else {
uLIndex.splice(uLIndex.indexOf(cb.value), 1); // note the change here
console.log(uLIndex);
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="checkbox" name="updateListings[]" value="1" onclick="doSomething(this)">
<input type="checkbox" name="updateListings[]" value="2" onclick="doSomething(this)">
<input type="checkbox" name="updateListings[]" value="3" onclick="doSomething(this)">
<input type="checkbox" name="updateListings[]" value="4" onclick="doSomething(this)">
отметить также, что она считается лучшей практикой используйте ненавязчивые обработчик событий над атрибутами теперь устарело on*
события. Вы также можете упростить код для построения массива при каждом нажатии, используя метод jQuery map()
, вместо того, чтобы вручную отслеживать добавления/удаления. Попробуйте это:
$('input:checkbox').change(function() {
var uLIndex = $('input:checkbox:checked').map(function() {
return this.value;
}).get();
console.log(uLIndex);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="checkbox" name="updateListings[]" value="1">
<input type="checkbox" name="updateListings[]" value="2">
<input type="checkbox" name="updateListings[]" value="3">
<input type="checkbox" name="updateListings[]" value="4">
Как и большинство вещей, которые вовлекают JQuery, эта версия имеет преимущество использования гораздо более простой логики, но быть немного медленнее (хотя мы говорим только миллисекунды). Если вам нужен более высокий уровень производительности, я бы сказал, что вы, вероятно, вообще не должны использовать jQuery.
'cb.value' не является индексом в массиве, это строка (" '+ x +' "). См. ['Сращивание'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice) – Teemu
Проведенное событие onchange все тот же результат, установив флажок 2 и сняв флажок и повторно проверка rsult равна 1,1 –
Пожалуйста, перечитайте мой комментарий, а также документацию, которую я связал. – Teemu