SumoSelect не будет открыт после перезагрузки

75
7

Я использую sumoselect на входах в моем Интернете.

Проблема в том, что если вы открываете второй сумоселект, и после этого вы хотите открыть сначала -so, нажмите сначала, и он не откроется...

Мой код:

$('.country').SumoSelect({placeholder: 'first'});
$('.anotherSumo').SumoSelect({placeholder: 'second'});

$('.anotherSumo').on('sumo:closing', function(e) {

$('.country').empty();
$('.country').append('<option value="newValue">newValue</option>');
$('.country')[0].sumo.reload({placeholder: 'first'});
});

Здесь работает скрипка. Просто откройте второй выбор и после этого попробуйте открыть сначала - 2 клика. В обратном порядке - сначала нажмите, чтобы открыть первый сумо, и после этого второй клик на втором сумо - все в порядке...

Я пытался добавить $('country').trigger("click"); после перезагрузки, но ничего

https://jsfiddle.net/eqa9og2v/5/

Мне нужно знать, как открыть первый сумо на втором клике любым способом, но с функциональным триггером на сумоселекте закрыть - потому что первый пользователь делает свой выбор, и если пользователь выполнил выбор параметров, он закрыл sumoselect (с открытием другого или только закрытием)

спросил(а) 2021-01-19T18:27:14+03:00 2 месяца, 3 недели назад
1
Решение
76

Я думаю, что способ, которым вы пытаетесь реализовать, не осуществимо и не будет достигнуто, потому что, когда вы нажимаете на 1-й, чтобы открыть его, вызывается второе выпадающее закрытие, в котором вы снова создаете 1-й. так что фактический щелчок 1-го падения будет потерян, так как все новые привязки добавляются к 1-й капли.

вы должны изменить код в плагине, если хотите достичь его, что не является хорошей практикой. Кроме того, вы можете принудительно отобразить варианты с помощью $('.sumo_country').addClass('open').attr('aria-expanded', 'true'); но снова для закрытия раскрывающегося списка вам нужно дважды щелкнуть в первый раз.


Правильный и осуществимый способ изменить любые выпадающие значения, которые зависят от другого, заключается в использовании функции change выпадающего списка.

В вашем случае вы должны изменить данные всякий раз, когда значение выбрано или отменено из второго выпадающего списка, которое будет работать для вас.

ответил(а) 2021-01-19T18:27:14+03:00 2 месяца, 3 недели назад
61

Вот рабочий пример. Как вы упомянули в комментариях, вы хотите изменить 1-й выбор после выбора чего-то с 2-го, а не сразу после его закрытия. .on('change',...) похоже, делает трюк.

https://jsfiddle.net/eqa9og2v/6/

ответил(а) 2021-01-19T18:27:14+03:00 2 месяца, 3 недели назад
44

Поэтому я понял... Есть способ сделать это! Мне это нужно было очень остро - если у вас есть какие-то уведомления или что-то еще, что вам угодно.

Мой код:

$('.country').SumoSelect({placeholder: 'first'});
$('.anotherSumo').SumoSelect({placeholder: 'second'});

$('.anotherSumo').on('sumo:closed', function(e) {

var count = $('.country option').length;

for(var i = 0; i < count; i++) {
$('.country')[0].sumo.remove(0);
}

$('.country')[0].sumo.add('newValue','newValue', 0);
});

Рабочая скрипка: https://jsfiddle.net/eqa9og2v/7/

ВНИМАНИЕ: Если вам необходимо правильно рабочие входы (для отправки формы или что) вам нужно добавить/удалить option элементы в select по своему тоже...

ответил(а) 2021-01-19T18:27:14+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема