Я пытаюсь открыть выбор после нажатия кнопки, но это не работает. Если я вставляю и предупреждаю() после триггера, он открывается...
(Используя выбранную версию 1.0 с jquery)
пример:
<select id="select">
<option value="1">a</option>
<option value="2">b</option>
<option value="3">c</option>
</select>
<br>
<button onclick="$('#select').trigger('chosen:open'); ">Press this button to open (doesnt work) </button>
<button onclick="$('#select').trigger('chosen:open'); alert('ups!');">Press this button to open (work???)</button>
<script>
$(document).ready(function() {
$('#select').chosen();
});
</script>
пример в: http://jsfiddle.net/EArg6/28/
Ни одна кнопка не работает для меня в вашей скрипке (в Safari).
Какой браузер/версию вы используете?
Я тестировал это с помощью:
первая кнопка не работает
Вторая кнопка открывает список параметров (закрывается только при закрытии окна «предупреждение»).
Когда вы нажимаете кнопку, Chosen получает событие chosen:open
. Однако событие продолжает всплывать в DOM, и Chosen немедленно обнаруживает щелчок по элементу, который не является активным Chosen... поэтому он закрывает его. Есть смысл?
Если вы работаете со встроенным JS, самое простое решение — использовать setTimeout
для выхода из текущего стека событий:
onClick="setTimeout(function(){ $('#select').trigger('chosen:open'); }, 0)"
Однако вам почти наверняка не следует использовать встроенный JS. Вы по-прежнему можете использовать setTimeout
если хотите, но достаточно просто остановить всплытие событий.
$('button').on("click", function(evt){
evt.stopPropagation();
$('#select').trigger('chosen:open');
});
Я обновил вашу скрипку с помощью этого рабочего кода: http://jsfiddle.net/EArg6/33/
спасибо @pfiller
Спасибо @pfiller , это решение и объяснение избавили меня от изжоги!
Самый полезный комментарий
Когда вы нажимаете кнопку, Chosen получает событие
chosen:open
. Однако событие продолжает всплывать в DOM, и Chosen немедленно обнаруживает щелчок по элементу, который не является активным Chosen... поэтому он закрывает его. Есть смысл?Если вы работаете со встроенным JS, самое простое решение — использовать
setTimeout
для выхода из текущего стека событий:Однако вам почти наверняка не следует использовать встроенный JS. Вы по-прежнему можете использовать
setTimeout
если хотите, но достаточно просто остановить всплытие событий.Я обновил вашу скрипку с помощью этого рабочего кода: http://jsfiddle.net/EArg6/33/