드롭 다운의 변경 이벤트 트리거


86

jquery를 사용하여 $ (document) .ready에서 드롭 다운의 변경 이벤트를 트리거하고 싶습니다.

사용자 세부 정보 페이지에 국가 및 주에 대한 계단식 드롭 다운이 있습니다. C #을 사용하여 MVC에서 국가 및 주에 대한 값 (사용자 ID를 기반으로 DB에서 가져옴)을 어떻게 설정할 수 있습니까?


더 많은 정보를 얻으려면 자바 스크립트 및 jQuery와 같은 태그를 더 추가하고 싶을 수도 있습니다.
— xenon

답변:


185

JQuery를 많이 모르지만이 구문으로 네이티브 이벤트를 실행할 수 있다고 들었습니다.

$(document).ready(function(){

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

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

trigger () 또는 change ()를 호출하기 전에 변경 이벤트 핸들러를 선언해야합니다. 그렇지 않으면 실행되지 않습니다. @LenielMacaferi를 언급 해 주셔서 감사합니다.

자세한 정보는 여기 .


13
호출하기 전에 trigger()또는 change()이 답변에 올바르게 표시된대로 변경 이벤트 처리기를 선언해야합니다 . 즉, 호출 아래에 이벤트 처리기 코드가 나타나면 아무 일도 일어나지 않습니다! :)
— Leniel Maccaferri 2013 년

3
@LenielMacaferi 한두 시간을 절약 해주셔서 감사합니다.
— 프랭크 Nocke

@Christophe Eblé & Leniel Macaferi, 감사합니다. Christophe, Leniel의 의견을 답변에 추가해 주시겠습니까?
— Zaxter

.change ()를 사용했지만 jquery 3.1.1에는 운이 없었습니다.이 게시물 이후 예상대로 트리거됩니다.
— Sorangwala Abbasali

이것은 끝없이 반복되고 모든 사람의 해결책이 반복됩니다.
— Nathan McKaskle 2017-06-20

12

이 시도:

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

변경 이벤트를 정의하고 즉시 트리거하십시오. 이렇게하면 이벤트 핸들러가 호출되기 전에 정의됩니다.

원래 포스터에 대한 답변에 늦을 수 있지만 다른 사람이 속기 표기법의 이점을 누릴 수 있으며 이는 jQuery의 연결 등을 따릅니다.

jquery 체이닝


7

이 시도:

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

나를 위해 작동합니다.

값 설정과 함께 한 줄에 : $('#id').val(16).change();


3
$ ( '# id'). val (16) .change (); 나를 위해 해냈어.
— TomoMiha

1
감사합니다, @TomoMiha. 답변에 추가했습니다.
— d.popov

2

링크 된 드롭 다운을 사용하려는 경우이를 수행하는 가장 좋은 방법은 미리 빌드 된 선택 상자를 반환하는 스크립트와이를 요청하는 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);
            }
        });
    });

});

그런 다음 ID가 "stateBoxHook"인 상태 선택 상자 주위에 스팬을 두십시오.


계단식 드롭 다운이 있습니다. <% = Html.DropDownList ( "MyCountries", "--- Select Country ---") %> <% = Html.CascadingDropDownList ( "MyStates", "MyCountries") %> MyCountries 값을 $ ( "# MyCountries"). val ( '<% = Model.CountryId %>'); $ (document) .ready. 그러나 계단식 드롭 다운이므로 국가 onchange 이벤트에 채워야하는 "주 선택"옵션이 하나만 표시되므로 주에 대한 값을 설정할 수 없습니다. 이것은 실제 문제입니다.
— Prasad

아직도 당신이 무엇을 추구하는지 확실하지 않습니다. 국가를 선택하고 목록을 해당 국가의 주로 좁히는 시스템을 구축하려고합니까? 이 경우 서버에 AJAX 호출을하고 선택한 국가를 보낸 다음 해당 국가의 주 목록을 반환해야합니다.
— 크세논

사용자 프로필을 추가하는 동안 미국을 국가 및 앨라배마 주를 계단식 드롭 다운으로 설정했습니다. 필드를 편집하기 위해 해당 페이지로 돌아 왔을 때 이전에 설정 한 값으로 국가 및 주를 채워야합니다. 사용자 프로필을 추가하는 데 문제가 없습니다. 편집하기 위해 페이지로 돌아 왔을 때 국가 드롭 다운 값을 설정할 수 있으며 상태 드롭 다운에서 국가 값을 채우는 계단식이므로 값이 채워지지 않습니다. 변경 이벤트. 이를 위해 국가 변경 이벤트를 트리거하여 주가 채워지고 주를 설정할 수 있습니다
— Prasad

왜 그렇습니까? 페이지로드 시간에 국가가 무엇인지 알고 있으므로 올바른 주를 선택한 상태로 올바른 주 선택 목록을 렌더링 할 수 있습니다. 국가를 변경하면 목록이 다시로드됩니다.
— 크세논

1

또는 드롭 다운 목록 자체에 onchange 속성을 넣을 수 있으며, 해당 onchange는 이와 같은 특정 jquery 함수를 호출합니다.

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

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

이 코드가 도움이되기를 바라며,이 코드는 어떤 IDE에서도 테스트되지 않은 초안 일 뿐이라는 점에 유의하십시오. 감사


이것은 페이지가 처음로드 될 때 변경 이벤트를 트리거하지 않습니다 (OP의 질문에 따라)

0

어떤 이유로 jQuery여기에 제공된 다른 솔루션은 콘솔에서 스크립트를 실행할 때 작동했지만 Chrome 북마크 에서 트리거되면 작동하지 않았습니다 .

다행히도이 Vanilla JS 솔루션 ( triggerChangeEvent기능)이 작동했습니다.

/**
  * Trigger a `change` event on given drop down option element.
  * WARNING: only works if not already selected.
  * @see /programming/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>

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.