Два сценария: приведенные ниже два случая не выполняются одновременно. У меня есть раскрывающийся список с существующими параметрами, что мне нужно сделать, это
Добавьте атрибут «selected» к опции, которая соответствует ключу из объекта. Мне не нужен здесь множественный выбор, я не знал, как объяснить здесь мой фактический сценарий, поэтому я использовал «Бэтмен» в условии if if (jQuery(this).val() == «Бэтмен»), в мой сценарий бэтмен динамичен.
Если ключи не совпадают и не существуют в DOM (выберите), добавьте этот ключ в качестве опции и добавьте атрибут «выбрано».
Я почти закончил, но не смог найти решение, не заменив все значения в раскрывающемся списке (пожалуйста, запустите фрагмент). Я также пробовал добавить опцию, но не мог понять это правильно.
var obj = {"characters": [{"Hulk": "Hulk"}]};
var opt;
$.each(obj["characters"], function(index, value) {
$.each(value, function(val) {
$('.sel-dropdwn').each(function() {
if ($(this).find('option').val() == val)
$(this).find('option').attr('selected', 'selected');
else{
opt = $('<option></option>');
opt.text(val).val(val).attr('selected','selected');
$(this).append(opt)
}
});
});
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select aria-required = "true" class = "form-control sel-dropdwn">
<option value = "">-- None --</option>
<option value = "Superman">Superman</option>
<option value = "Batman">Batman</option>
<option value = "Ironman">Ironman</option>
</select>
Я переписал свой вопрос, потому что мне может быть непонятно, мне нужно включить два сценария: 1. если ключ от объекта существует в раскрывающемся списке, добавьте атрибут выбора 2. Если ключ не существует, добавьте/добавьте его к выпадающий список. В этом случае добавьте «Халк» в раскрывающийся список и сделайте его выбранным.
Нет необходимости «добавлять выбранный атрибут к опции». $('выбрать').val(значение); сделает это за вас. Вам просто нужно посмотреть, существует ли значение, которое у вас уже есть, в выборе или нет. В конце, после добавления новой опции (при необходимости) просто установите val() в качестве значения.
@connexo прав. Основываясь на вашем примере, я понимаю, что вы хотите добавить Халка, потому что его еще нет в опциях. что, если не хватает более одного варианта? С другой стороны... если Халк уже был в опциях... какую из них вы выберете? если вы говорите "халк".. тогда почему?
@connexo, пример, который я взял, был плохим, в реальном сценарии, с которым я столкнулся, совпадет только один вариант, мне нужно проверить, существует ли он или нет, если нет, добавить и выбрать его. Если опция уже существует, добавьте к ней выбранное.
@NawedKhan Я не мог правильно понять фрагмент, потому что это очень сложно объяснить здесь. Здесь будет только один вариант, который будет совпадать.
Затем настройте свой код, чтобы он соответствовал вашему сценарию. После всех ваших объяснений непонятно еще. Вы имели в виду, что получаете только один объект в своем JSON? Если нет, то как вы справляетесь с более чем одним несовпадающим объектом? Все ли они добавляются, и если да, то какой из них вы хотите выбрать?
Таким образом, это означает, что вы проверяете одно значение, а не список элементов. У вас есть «Халк» под рукой, и вы хотите выбрать Халка, если он существует в списке опций, или (если не существует) добавить и выбрать его.
@NawedKhan да, пожалуйста, объясните мне, как это сделать, это может быть ближе всего к моему делу, что может дать мне преимущество
@connexo Прошу прощения за всю эту путаницу, да, он будет получать по одному объекту из json за раз. Сейчас попробую код подправить.
Основываясь на комментарии и пояснении OP, мы понимаем, что хотим выбрать или добавить и выбрать заданное значение.
let character = 'Hulk';
let exists = $('.sel-dropdwn option[value = "'+ character + '"]').length > 0;
if (!exists){
let option = $('<option value = "'+ character + '"></option>').text(character);
$('.sel-dropdwn').append(option);
}
$('.sel-dropdwn').val(character);
Здесь я использую одно значение для символа. У вас может быть объект с ключом/значением.
В элементе
select
только один параметр может бытьselected
в любой момент времени, если вы не добавите атрибутmultiple
(которого нет в вашем HTML).