선택 후 작업 트리거 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.