#javascript #jquery #html #checkbox
#javascript #jquery #HTML #флажок
Вопрос:
просто хочу спросить, как я могу установить значения по умолчанию в соответствии с количеством доступных флажков. Например, у меня есть 3 флажка, и я хочу иметь значения по умолчанию 0,0,0, поскольку у меня есть 3 флажка. И если пользователь нажмет первый флажок, первый 0 будет заменен на 1, поскольку значение первого флажка имеет значение 1 и совпадает с остальными флажками. И если пользователь снимет первый флажок, он вернется к значению по умолчанию, которое равно 0. Я встроил свой фрагмент. Заранее благодарю вас, ребята.
$('input#category').on('change', function () {
var selectedCategories = $('.category:checkbox:checked').map(function () {
return this.value;
}).get();
$('#post_category').val(selectedCategories);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input type="checkbox" value="1" id="category" name="category" class="category category_1">Category 1
<input type="checkbox" value="2" id="category" name="category" class="category category_2">Category 2
<input type="checkbox" value="3" id="category" name="category" class="category category_3">Category 3
<br />
<h5>Result:</h5>
<input type="text" id="post_category">
Комментарии:
1. У вас должны быть html-элементы с уникальным
id
атрибутом.. Проверьте, чтоid="category"
это несколько раз
Ответ №1:
Убедитесь, что в вашем коде есть несколько элементов с одинаковыми id
name
атрибутами и, и они должны быть уникальными.
В обработчике change
событий нет необходимости создавать сопоставление / перебирать все входные данные с установленным флажком, потому что флажок измененного элемента имеет свойства value
и checked
:
var arr = [0, 0, 0],
setPostCategory = function() {
arr[this.value - 1] = (this.checked) ? this.value : 0;
$('#post_category').val(arr.join(', '));
};
$('input.category').on('change', setPostCategory);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input type="checkbox" value="1" name="category1" class="category">Category 1
<input type="checkbox" value="2" name="category2" class="category">Category 2
<input type="checkbox" value="3" name="category3" class="category">Category 3
<br>
<h5>Result:</h5>
<input type="text" id="post_category" value="0, 0, 0">
Ответ №2:
Вы уже это делаете, просто проверьте, установлены ли флажки внутри сопоставления
var elems = $('.category[type="checkbox"]').on('change', function() {
var selectedCategories = elems.map(function() {
return this.checked ? this.value : 0;
}).get();
$('#post_category').val(selectedCategories);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input type="checkbox" value="1" id="category1" name="category" class="category category_1">Category 1
<input type="checkbox" value="2" id="category2" name="category" class="category category_2">Category 2
<input type="checkbox" value="3" id="category3" name="category" class="category category_3">Category 3
<br />
<h5>Result:</h5>
<input type="text" id="post_category">
Обратите внимание на изменение селектора. У вас может быть одинаковое имя класса для всех трех входных данных, но они не могут иметь одинаковый идентификатор, поскольку идентификаторы уникальны
Комментарии:
1. Спасибо вам за это замечательное. Теперь это работает! Большое спасибо!
2. @johnlopev: нет необходимости создавать карту / перебирать все входные данные с установленным флажком, потому что флажок измененного элемента имеет свойства
value
иchecked
.. Проверьте мой ответ3. Этот ответ неверен: не исправлено несколько элементов с одним и тем же
id
атрибутом … а также устанавливается значение 1 в обработчике событий, но должно быть значением элемента в соответствии с вопросом
Ответ №3:
$(‘#post_category’).empty();
$(‘#post_category’).val(выбранные категории);