Инициировать событие изменения раскрывающегося списка

Я хочу вызвать событие изменения раскрывающегося списка в $(document).ready с помощью jquery.

У меня есть каскадное раскрывающееся меню для страны и штата на странице сведений о пользователе. как я могу установить значение (которое берется из БД на основе идентификатора пользователя) для страны и штата в MVC с С#.


person Prasad    schedule 23.05.2009    source источник
comment
Возможно, вы захотите добавить еще несколько тегов, таких как javascript и jQuery, чтобы найти больше   -  person xenon    schedule 23.05.2009
comment
stackoverflow.com /вопросы/31913370/   -  person LarryHuff    schedule 26.03.2017


Ответы (6)


Я не так много знаю JQuery, но я слышал, что он позволяет запускать собственные события с этим синтаксисом.

$(document).ready(function(){

    $('#countrylist').change(function(e){
       // Your event handler
    });

    // And now fire change event when the DOM is ready
    $('#countrylist').trigger('change');
});

Вы должны объявить обработчик события изменения перед вызовом триггера() или изменения(), иначе он не будет запущен. Спасибо за упоминание @LenielMacaferi.

Дополнительная информация здесь.

person Christophe Eblé    schedule 24.05.2009
comment
Вы должны объявить обработчик события изменения перед вызовом trigger() или даже change(), как правильно показано в этом ответе, то есть, если код обработчика события появляется ниже вызова, ничего не происходит! :) - person Leniel Maccaferri; 10.03.2013
comment
@LenielMacaferi Спасибо, что сэкономили мне час или два. - person Frank Nocke; 19.06.2013
comment
@Кристоф Эбле и Лениэль Макафери, большое спасибо. Кристоф, не могли бы вы добавить комментарий Лениэля к своему ответу? - person Zaxter; 11.03.2015
comment
Я использовал .change(), но не повезло с jquery 3.1.1. После этого поста он запускается, как и ожидалось. - person Sorangwala Abbasali; 29.12.2016
comment
Это просто заканчивается бесконечным циклом, все решения этого заканчиваются циклом. - person Nathan McKaskle; 20.06.2017
comment
Я предполагаю, что каждый раз, когда запускается событие изменения, запускается событие document.ready. - person Nathan McKaskle; 20.06.2017

Попробуй это:

$(document).ready(function(event) {
    $('#countrylist').change(function(e){
         // put code here
     }).change();
});

Определите событие изменения и немедленно инициируйте его. Это гарантирует, что обработчик события определен до его вызова.

Может быть поздно ответить на оригинальный постер, но кому-то еще может быть полезна сокращенная запись, и это следует за цепочкой jQuery и т. Д.

цепочка jquery

person mlnyc    schedule 30.04.2013

Попробуй это:

$('#id').change();

Работает на меня.

В одной строке вместе с установкой значения: $('#id').val(16).change();

person d.popov    schedule 18.11.2014
comment
$('#id').val(16).change(); сделал это для меня. - person TomoMiha; 10.05.2016
comment
Спасибо, @TomoMiha. Добавил в ответ. - person d.popov; 10.05.2016

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

Вот документация для метода jQuery Ajax, если она вам нужна.

$(document).ready(function(){

    $('#countrylist').change(function(e){
        $this = $(e.target);
        $.ajax({
            type: "POST",
            url: "scriptname.asp", // Don't know asp/asp.net at all so you will have to do this bit
            data: { country: $this.val() },
            success:function(data){
                $('#stateBoxHook').html(data);
            }
        });
    });

});

Затем создайте диапазон вокруг поля выбора вашего состояния с идентификатором "stateBoxHook".

person xenon    schedule 23.05.2009
comment
У меня есть каскадные раскрывающиеся списки: ‹%= Html.DropDownList(MyCountries, --- Select Country---)%› ‹%= Html.CascadingDropDownList(MyStates, MyCountries)%› Я могу установить значение MyCountries как $(#MyCountries ).val('‹%= Model.CountryId %›'); в $(документ).готов. Но я не могу установить значение для состояния, так как оно показывает только одну опцию «Выбрать состояние», которая должна быть заполнена в событии onchange страны, поскольку они представляют собой каскадные раскрывающиеся списки. Это актуальная проблема. - person Prasad; 23.05.2009
comment
Все еще не уверен, что вы после. Вы пытаетесь создать систему, при которой они выбирают страну, а список сужается до штатов в этой стране? Если это так, вам нужно будет вызвать AJAX на сервер и отправить выбранную страну, а затем вернуть список штатов в этой стране. - person xenon; 24.05.2009
comment
Я установил США как страну и Алабаму как штат, который представляет собой каскадное раскрывающееся меню при добавлении профиля пользователя. И когда я вернусь на эту страницу, чтобы отредактировать поле, мне нужно, чтобы страна и штат были заполнены значениями, которые я установил ранее. У меня нет проблем с добавлением профиля пользователя, когда я возвращаюсь на страницу для редактирования, я могу установить значение для раскрывающегося списка «Страна», а в раскрывающемся списке состояния значения не заполняются, поскольку он каскадный, который заполняет значение страны изменить событие. Для этого мне нужно инициировать событие изменения страны, чтобы состояние было заполнено, и я мог установить состояние - person Prasad; 24.05.2009
comment
Почему это так? Вы знаете, какая страна находится во время загрузки страницы, поэтому вы можете отобразить правильный список выбранных штатов с выбранным правильным штатом. При смене страны список все равно обновится. - person xenon; 24.05.2009

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

<input type="dropdownlist" onchange="jqueryFunc()">

<script type="text/javascript">
$(function(){
    jqueryFunc(){
        //something goes here
    }
});
</script>

надеюсь, что это поможет вам, и обратите внимание, что этот код является всего лишь черновиком, не проверенным ни на одном ide. Благодарность

person dave    schedule 22.01.2015
comment
Это не вызывает событие изменения при первой загрузке страницы (согласно вопросу ОП) - person ; 22.01.2015

По какой-то причине другие jQuery решения, представленные здесь, работали при запуске сценария из консоли, однако у меня они не работали при запуске из Chrome Букмарклеты.

К счастью, это решение Vanilla JS (функция triggerChangeEvent) сработало:

/**
  * Trigger a `change` event on given drop down option element.
  * WARNING: only works if not already selected.
  * @see https://stackoverflow.com/questions/902212/trigger-change-event-of-dropdown/58579258#58579258
  */
function triggerChangeEvent(option) {
  // set selected property
  option.selected = true;
  
  // raise event on parent <select> element
  if ("createEvent" in document) {
    var evt = document.createEvent("HTMLEvents");
    evt.initEvent("change", false, true);
    option.parentNode.dispatchEvent(evt);
  }
  else {
    option.parentNode.fireEvent("onchange");
  }
}

// ################################################
// Setup our test case
// ################################################

(function setup() {
  const sel = document.querySelector('#fruit');
  sel.onchange = () => {
    document.querySelector('#result').textContent = sel.value;
  };
})();

function runTest() {
  const sel = document.querySelector('#selector').value;
  const optionEl = document.querySelector(sel);
  triggerChangeEvent(optionEl);
}
<select id="fruit">
  <option value="">(select a fruit)</option>
  <option value="apple">Apple</option>
  <option value="banana">Banana</option>
  <option value="pineapple">Pineapple</option>
</select>

<p>
  You have selected: <b id="result"></b>
</p>
<p>
  <input id="selector" placeholder="selector" value="option[value='banana']">
  <button onclick="runTest()">Trigger select!</button>
</p>

person Domi    schedule 27.10.2019