Я вижу странное поведение, которое при использовании addEventListener
, обработчика событий не срабатывает при выборе с помощью display: none;
. С другой стороны, когда я использую jQuery, он срабатывает. Какой трюк позволяет jQuery сделать это и как заставить его работать в простом JavaScript?Изменение события срабатывает обработчик jquery, но не обработчик javascript
Вот код, который показывает пример.
// This doesn't work
document.getElementById("notDisplayedSelect").addEventListener("change", function(e) {
$("#output").text("When select is hidden events still fire: new value = " + $(this).val());
});
/*
// This works
$("#notDisplayedSelect").change(function (e) {
$("#output").text("When select is hidden events still fire: new value = "+ $(this).val());
});
*/
$("#setValue").click(function() {
$("#notDisplayedSelect").val("3").trigger("change");
});
#notDisplayedSelect {
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<select id="notDisplayedSelect">
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
<span id="output">I show selected value</span>
<button id="setValue">Select third option in the hidden select</button>
Как вы можете изменить то, что не видно? – Barmar
Вы можете использовать 'select' под капотом, показывая более сложный пользовательский элемент управления. Хороший пример: https://jqueryui.com/autocomplete/#combobox –
Это фактически не имеет ничего общего с тем, что элемент select скрыт. Если вы удалите «display: none» из jsFiddle, вы не заметите разницы. Проблема заключается в том, как вы стреляете по этому событию, как это упомянуто ниже. Проверьте, как правильно запустить событие: http://stackoverflow.com/questions/2490825/how-to-trigger-event-in-javascript – Vince