선택 후 작업 트리거 select2


79

내가 사용하고 선택 2 라이브러리를 내 검색.
검색 결과를 선택한 후 작업을 트리거하는 방법이 있습니까? 예를 들어 팝업 또는 간단한 js 경고를 엽니 다.

$("#e6").select2({
    placeholder: "Enter an item id please",
    minimumInputLength: 1,
    ajax: { // instead of writing the function to execute the request we use Select2's convenient helper
        url: "index.php?r=sia/searchresults",
        dataType: 'jsonp',
        quietMillis: 3000,
        data: function (term, page) {
        return {
            q: term, // search term
            page_limit: 10,
            id: 10
            };
        },
        results: function (data, page) { // parse the results into the format expected by Select2.
            // since we are using custom formatting functions we do not need to alter remote JSON data
            return {results: data};
        },
    },

    formatResult: movieFormatResult, // omitted for brevity, see the source of this page
    formatSelection: movieFormatSelection, // omitted for brevity, see the source of this page
    dropdownCssClass: "bigdrop", // apply css that makes the dropdown taller
    escapeMarkup: function (m) { return m; } // we do not want to escape markup since we are displaying html in results
});

1
'변경'이벤트에 바인딩 할 수 있습니다. 다른 모든 이벤트 바인딩에 대한 매우 긴 코드 조각과 함께 제공 한 링크에 "이벤트"라는 섹션이 있습니다.
— Ross

답변:


171

문서 이벤트 섹션을 참조하십시오.

버전에 따라 아래 스 니펫 중 하나가 원하는 이벤트를 제공해야합니다. 또는 "select2-selecting"을 "change"로 바꾸십시오.

버전 4.0 이상

이제 이벤트 형식 : select2:selecting(대신 select2-selecting)

이것이 4.0에서 변경되었다는 알림에 대해 snakey에게 감사드립니다.

$('#yourselect').on("select2:selecting", function(e) { 
   // what you would like to happen
});

4.0 이전 버전

$('#yourselect').on("select2-selecting", function(e) { 
   // what you would like to happen
});

명확히하기 위해 문서는 select2-selecting다음과 같습니다.

select2-selecting 드롭 다운에서 선택 항목이 선택 될 때 시작되지만 선택 항목이 수정되기 전에 실행됩니다. 이 이벤트는 사용자가 event.preventDefault ()를 호출하여 선택을 거부 할 수 있도록하는 데 사용됩니다.

반면 변화는 다음과 같습니다.

선택이 변경되면 시작됩니다.

따라서 change선택을 완료 한 다음 이벤트를 수행할지 또는 잠재적으로 변경을 차단할지 여부에 따라 필요에 더 적합 할 수 있습니다.


13
이벤트는 최신 버전에서 다른 이름
— 을가집니다

1
이벤트는 여기 다큐먼트에. FAQ 스타일로 명확하지 않습니다.
— Pierre de LESPINAY

1
값이 설정되기 직전에 "선택"호출이 수행됩니다. 로 이어질 것이다 "CONSOLE.LOG ($ (이) .val ())"빈 값을하고 출력하기
— 조셉 그루 Kormelink

각도 응용 프로그램에서 똑같이 시도했을 때 잘못된 값을 제공했습니다. select2 옵션에 4 개의 값이 있다고 가정합니다. 1 분, 5 분, 1 시간, 매일. 이제 $ ( '#의 yourselect')를 사용하여 ( "선택 2-선택"기능 (E)에 {...} 그것은 내가 선택한 것을 저에게 이전 값을주고 있었다..
— 야쉬 자이나교

그 대신으로 나는 $ ( '#의 yourselect')를 시도했다 ( "선택 2-선택"), 기능 (E)에 {...} 나를 위해 일했다.
— 야쉬 자이나교

25

select2 이벤트 이름이 약간 변경되었으므로 (v. 4 이상에서 생각합니다) '-' 가 ':' 로 변경되었습니다 .
다음 예를 참조하십시오.

$('#select').on("select2:select", function(e) { 
    //Do stuff
});

모든 이벤트는 'select2'플러그인 사이트에서 확인할 수 있습니다 : select2 Events


13

나를 위해 작동합니다.

$('#yourselect').on("change", function(e) { 
   // what you would like to happen
});

나는 이유를 이해하지 못하지만 Tarek의 대답이 그렇지 않을 때 이것이 나를 위해 일했습니다. 나는 별도의 프로젝트에서 작업하는 그의 대답도 얻었지만 어떤 이유로 이것이 내 프로젝트를 시작하고 실행하는 유일한 재정의였습니다.
— tokyo0709

@ tokyo0709 .change이벤트가 select2:select이벤트 보다 일련의 실행에서 나중에 발생 하기 때문에 작동합니다 . 나를 위해 나는 선택의 CSS를 캡처하려고 select2:select했지만 검사자에서 그것을 보았지만 그것을 통해 캡처 할 수 없었습니다 .Select2가 원래 선택에 대한 CSS를 업데이트 하기 전에 이벤트 를 발생 select2:select시키기 .change때문에 작동했기 때문에 작동했습니다 .. 약간 미친 , 제 생각에는. select2:select
— a20

1
@ a20 때때로 쉬운 해결 방법은 html css를 통해 dom 요소 css를 설정하는 것이므로 javascript 엔진이 따라 잡을 때까지 기다릴 필요가 없습니다. 어떤 경우에는 잘 작동합니다.
— yardpenalty.com

7

v.4 위의 사용에 따라 이것은 작동합니다.

$('#selectID').on("select2:select", function(e) { 
    //var value = e.params.data;  Using {id,text format}
});

그리고 v.4 이하에서는 작동합니다.

$('#selectID').on("change", function(e) { 
   //var value = e.params.data; Using {id,text} format
});

이것은 나를 위해 작동하지 않습니다. 위의 코드를 아래와 같이 변경했습니다. e.params.args.data
— Tushar Saxena

이것은 나에게도 작동하지 않았다. e.params.data through data field not found for undefined. 자세히 살펴보면 e에 대해 설정된 params 필드가 없습니다. 내 문제에 대해서는 값을 읽어야 했으므로 e.val이 충분했습니다.
— NemyaNation


0
//when a Department selecting
$('#department_id').on('select2-selecting', function (e) {
    console.log("Action Before Selected");
    var deptid=e.choice.id;
    var depttext=e.choice.text;
    console.log("Department ID "+deptid);
    console.log("Department Text "+depttext);
});

//when a Department removing
$('#department_id').on('select2-removing', function (e) {
    console.log("Action Before Deleted");
    var deptid=e.choice.id;
    var depttext=e.choice.text;
    console.log("Department ID "+deptid);
    console.log("Department Text "+depttext);
});
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.