#javascript #jquery #html
#javascript #jquery #HTML
Вопрос:
У меня есть элемент выбора, который допускает множественный выбор. Я хотел бы отображать выбранные значения в другой части страницы (в div или чем-то еще), когда пользователь вносит изменения в то, что выбрано.
Является ли единственный способ сделать это, чтобы перебрать «параметры» и проверить, верно ли значение «выбрано»? это было бы нежелательно, поскольку каждое событие «onchange» потребовало бы повторения всего элемента выбора.
Вот скрипка, которая демонстрирует, как я сейчас это делаю, но я надеюсь, что, возможно, есть лучший способ, чем перебирать все параметры при каждом «изменении»: скрипка множественного выбора элемента onchange
Ответ №1:
.val()
при множественном выборе возвращается массив.
Смотрите фрагмент ниже в качестве примера:
$(function() {
$('#fruits').change(function(e) {
var selected = $(e.target).val();
console.dir(selected);
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select multiple="true" id="fruits">
<option value="apple">Apple</option>
<option value="banana">Banana</option>
<option value="mango">Mango</option>
<option value="grape">Grape</option>
<option value="watermelon">watermelon</option>
</select>
Ответ №2:
В вашей скрипке я только что использовал .val()
. Это возвращает массив
$(function() {
$('#fruits').change(function() {
console.log($(this).val());
});
});
Ответ №3:
Если бы вы могли использовать jQuery, это могло бы быть так же просто, как:
$('select').change(function() {alert($(this).val())})
Ответ №4:
Вы могли бы использовать размытие вместо изменения, чтобы выбор обрабатывался только один раз, а не при каждом выборе. http://jsfiddle.net/2mSUS/3
Комментарии:
1. Это не подходит, поскольку @codecraig сказал «поскольку пользователь вносит изменения в то, что выбрано»
Ответ №5:
$(function() {
$('#fruits').change(function(e) {
var selected = $(e.target).val();
console.dir(selected);
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select multiple="true" id="fruits">
<option value="apple">Apple</option>
<option value="banana">Banana</option>
<option value="mango">Mango</option>
<option value="grape">Grape</option>
<option value="watermelon">watermelon</option>
</select>
Ответ №6:
Вместо этого вы можете использовать :selected селектор jQuery, но я полагаю, что под капотом jQuery выполняет цикл для selected = true .
Ответ №7:
element.addEventListener('click', function(){alert(this.value)})
Это решение на JS, вы можете довольно легко перенести его на jQuery. Идея состоит в том, чтобы добавить прослушиватель щелчков к каждой опции в выборе. Это не будет работать в IE8 и ниже из-за addEventListener
, однако есть способы обойти это.
Я думаю, что это лучший подход, чем повторять по списку. Однако к каждому варианту должен быть подключен прослушиватель.
Ответ №8:
Это работает:
var MyControl = document.getElementById('Control_ID');
var newValue = MyControl[MyControl.selectedIndex].value;
Конечно, Control_ID — это идентификатор элемента управления select.
Комментарии:
1. Это не отвечает на вопрос, как работать с несколькими выбранными значениями.
Ответ №9:
Я выполняю отправку формы. Мой помощник по шаблону выглядит следующим образом:
'submit #update': function(event) {
event.preventDefault();
var obj_opts = event.target.tags.selectedOptions; //returns HTMLCollection
var array_opts = Object.values(obj_opts); //convert to array
var stray = array_opts.map((o)=> o.text ); //to filter by: text, value or selected
//stray is now ["Test", "Milk Free"] for example, depending on the selection
//...do stuff...
}
Вы могли бы использовать аналогичный шаблон для ‘onchange’