JqGrid로 select2 드롭 다운의 선택된 값을 어떻게 변경합니까?


178

Oleg의 select2 데모를 사용 하고 있지만 드롭 다운 메뉴에서 현재 선택된 값을 변경할 수 있는지 궁금합니다.

예를 들어,로드 된 4 개의 값이 다음 "Any", "Fruit", "Vegetable", "Meat"과 같고 드롭 다운 목록이 기본값으로 설정된 경우 JqGrid 이벤트에서 어떻게 값 "Any"을 변경할 수 있습니까?"Fruit"loadComplete

이게 가능해?

답변:


407

select2 버전> = 4.0.0

다른 솔루션은 작동하지 않을 수 있지만 다음 예제는 작동합니다.

해결 방법 1 : select2를 포함하여 연결된 모든 변경 이벤트가 트리거되도록합니다.

$('select').val('1').trigger('change');

해결 방법 2 : JUST select2 변경 이벤트가 트리거되도록합니다.

$('select').val('1').trigger('change.select2');

이에 대한 예제는 이 jsfiddle 을 참조하십시오 . 솔루션 2에 대한 @minlare에게 감사합니다.

설명:

가장 친한 친구가 사람들의 이름을 가지고 있다고 가정 해 봅시다. 따라서 Bob, Bill 및 John (이 예제에서는 Value가 이름과 같다고 가정합니다). 먼저 select에서 select2를 초기화합니다.

$('#my-best-friend').select2();

이제 브라우저에서 Bob을 수동으로 선택합니다. 다음 밥은 나쁜 일을하고 더 이상 그를 좋아하지 않습니다. 따라서 시스템은 Bob을 선택 해제합니다.

$('#my-best-friend').val('').trigger('change');

또는 시스템이 Bob 대신 목록에서 다음을 선택한다고 가정하십시오.

// I have assume you can write code to select the next guy in the list
$('#my-best-friend').val('Bill').trigger('change');  

다른 사람에게 유용 할 수있는 Select 2 웹 사이트에 대한 참고 사항 (더 이상 사용되지 않고 제거 된 방법 참조 ) :

.select2 ( 'val') "val"메소드는 더 이상 사용되지 않으며 Select2 4.1에서 제거됩니다. 더 이상 사용되지 않는 메소드에는 더 이상 triggerChange 매개 변수가 포함되지 않습니다.

대신 기본 요소에서 .val을 직접 호출해야합니다. 두 번째 매개 변수 (triggerChange)가 필요한 경우 요소에서 .trigger ( "change")도 호출해야합니다.

$('select').val('1').trigger('change'); // instead of $('select').select2('val', '1');

8
이것은 정답입니다. 단일 선택과 다중 선택 모두에서 작동합니다.
Giovanni Di Milia

4
이 방법은 change이벤트에 바인딩 된 사용자 지정 작업이없는 경우에만 허용되는 솔루션입니다 (예 : 양식 다시로드). 그렇지 않으면 해당 조치가 트리거 될 때 중복 호출됩니다 change().
van_folmert

제대로 작동하지 않으면 setTimeout을 추가하십시오. setTimeout (function () {$ ( "select"). val ( "1"). trigger ( "change");}, 1000);
Abel

@van_folmert 나는 같은 문제가 있습니다. 이상적으로, 나는 이벤트를 발생시키지 않고 선택된 것으로 표시된 것을 변경하고 싶습니다 (사용자 정의 이벤트가 바인딩되어 있기 때문에 onChange)
onebree

1
@van_folmert 문제를 해결하는 방법의 예를 들어 내 대답은 아래를 참조
minlare

135

select2 문서 를 보면서 아래를 사용하여 값을 가져 오거나 설정하십시오.

$("#select").select2("val"); //get the value
$("#select").select2("val", "CA"); //set the value

@PanPipes는 이것이 4.x로 변경되었다고 지적했습니다 (아래에 공감하십시오). val이제 직접 호출됩니다

$("#select").val("CA");

따라서 loadCompletejqGrid 내에서 원하는 값을 얻을 수 있으며 선택 상자 값을 설정할 수 있습니다.

문서에서 통지

이 메소드를 사용하려면 옵션에서 initSelection 함수를 정의해야합니다. 따라서 Select2는 val ()에 전달한 오브젝트의 id를 선택을 렌더링하는 데 필요한 전체 오브젝트로 변환하는 방법을 알고 있습니다. 선택 요소에 연결하는 경우이 기능이 이미 제공되어 있습니다.


내가보고있는 데모와 함께 작동하지 않는 것 같습니다. 이유가 확실하지 않은 경우 JqGrid에 연결하는 방식과 관련이있을 수 있습니다.
Adam K Dean

1
답변을 업데이트했습니다. 해당 함수를 select2 초기화에 수동으로 추가해야 val호출 을 처리하는 방법을 알 수 있습니다 .
Jack

1
@AdamKDean : 하나는 여부를 추가로 테스트 할 수 있습니다 <select>로 변환 곳 select2클래스의 existense을 테스트하여 제어 select2-offscreen<select>. 검색 툴바의 모든 요소는 id로 시작하며 gs_접두어로 시작하고와 같은 이름을 갖습니다 colModel. 당신은 getGridParam얻을 수 있습니다 colModel.
Oleg

감사합니다. 필터 정보를 얻을 수 있었으므로 선택을 통해 필터 막대를 다시 만든 후에 설정해야합니다 select2. 나는 오늘 또 다른 모습을 취할 것입니다. 아마도 신선한 눈으로 고칠 수 있습니다. 다시 감사합니다. 업데이트 : 부울 검사로 코드를 래핑하면 이전 요소를 다시 선택하지 않고 검색 표시 줄 새로 고침을 중지했지만 문제가 해결되었습니다.
Adam K Dean

1
더 이상 사용되지 않습니다 : github.com/select2/select2/blob/master/dist/js/…
Andrey

32
this.$("#yourSelector").select2("data", { id: 1, text: "Some Text" });

도움이되어야합니다.


3
여러 값 예 : this. $ ( "# yourSelector"). select2 ( "data", [{id : 1, text : "Some Text"}, {id : 2, text : "Some Other Text"}]);
RodneyRd

18

훨씬 쉬워야합니다.

$("#e1").select2("val", ["View" ,"Modify"]);

그러나 전달한 값이 HTMl에 이미 있는지 확인하십시오.


17

new value='newValue'및 을 추가 text='newLabel'하려면 다음 코드를 추가해야합니다.

  1. 새 옵션 추가 <select>:

    var opt = "<option value='newValue' selected ='selected'>" + newLabel+ " </option>";
    $(selLocationID).html(opt);
  2. <select>선택한 값으로 트리거 변경 :

    $(selLocationID).val('newValue').trigger("change");

나는 select2 'data'를 망쳐 놓는 것 보다이 청소기를 찾습니다. :) DOM을 변경하고 select2가 나머지를 알아 내도록하십시오.
Paulj

Safari에서 테스트 중이며 실제로 작동하는 유일한 솔루션입니다. 다른 사람들은 더 설득력이 있고 나는 그들을 선호하지만 무엇보다도 작업 코드를 선호합니다. 그리고 이것입니다. :)
David

이것에 대해 백만 감사합니다! 두 상자 모두 Ajax로 채워진 select 2 상자로 작업하고 있으며 첫 번째 상자에 추가 데이터 속성을 사용하여 두 번째 상자의 값을 설정했습니다. 다시 한번 감사합니다 !!!!
Sam

16

두 번째 답변을 추가하고 싶었습니다. 선택을 이미 select2로 렌더링 한 경우 다음과 같이 선택기에 반영해야합니다.

$("#s2id_originalSelectId").select2("val", "value to select");

12

@PanPipes 답변에 따르면 다음과 같은 두 가지 옵션이 있습니다.

$(element).val(val).trigger('change');

변경 이벤트에 바인드 된 사용자 정의 조치가없는 경우에만 허용되는 솔루션입니다. 이 상황에서 사용하는 솔루션은 select2 표시 선택을 업데이트하는 select2 특정 이벤트를 트리거하는 것입니다.

$(element).val(val).trigger('change.select2');

예, 이것이 최고의 만능 솔루션입니다. 실제로 Select2는 값이 변경되면 내부 'change.select2'이벤트를 자동으로 트리거하여 디스플레이를 업데이트해야한다고 생각합니다. 그러나 이것은 최소한 사용자 정의 변경 이벤트 핸들러를 트리거하지 않고 새로운 값에 맞게 디스플레이를 업데이트하는 간단한 방법을 제공합니다.
DaveInMaine

이 '$ (element) .val (val) .trigger ('change.select2 ');' 나를 위해 일했다. @minlare 감사합니다.
Ray

9

select2에서 선택한 문자열 옵션을 설정하는 데 문제가 있습니다.

"option string1 / option"옵션을 사용하면 :

$('#select').val("string1").change(); 

옵션 값이 "E"인 string1 / option :

$('#select').val("E").change(); // you must enter the Value instead of the string

이것이 같은 문제로 어려움을 겪고있는 누군가를 돕기를 바랍니다.


5

단일 값을 선택하려면 $('#select').val(1).change()

여러 값을 선택하려면이 코드를 사용할 수 있도록 배열에서 값을 설정하십시오. $('#select').val([1,2,3]).change()


대괄호 아래에 문자열을 입력하면 작동하지 않습니다.
Utkarsh Pandey

5

select2의 값과 드롭 다운의 텍스트 표현을 모두 변경하려는 경우 V4 Select2의 경우.

var intValueOfFruit = 1;
var selectOption = new Option("Fruit", intValueOfFruit, true, true);
$('#select').append(selectOption).trigger('change');

장면 뒤의 값뿐만 아니라 select2의 텍스트 표시도 설정합니다.

https://select2.github.io/announcements-4.0.html#removed-methods 에서 가져옴


트리거 ( 'change.select2'). trigger ( 'select2 : select'); 변화만으로는 충분하지 않다면
Tebe


4

이 작업을 수행

 $('select#id').val(selectYear).select2();

이 코드는 질문에 대답 할 수 있지만,이 코드가 질문에 응답하는 이유 및 / 또는 방법에 대한 추가 컨텍스트를 제공하면 장기적인 가치가 향상됩니다.
rollstuhlfahrer

JqGrid에 대한 지식은 없지만이 코드를 사용하면 간단한 방법으로 select2 값을 변경할 수 있습니다.
Jaskaran singh Rajal

2

아약스 데이터 소스가 있다면 무료 버그를 참조하십시오.

https://select2.org/programmatic-control/add-select-clear-items

// Select2 컨트롤 설정

$('#mySelect2').select2({
    ajax: {
        url: '/api/students'
    }
});

// 미리 선택된 항목을 가져 와서 컨트롤에 추가

var studentSelect = $('#mySelect2');
$.ajax({
    type: 'GET',
    url: '/api/students/s/' + studentId
}).then(function (data) {
    // create the option and append to Select2
    var option = new Option(data.full_name, data.id, true, true);
    studentSelect.append(option).trigger('change');

    // manually trigger the `select2:select` event
    studentSelect.trigger({
        type: 'select2:select',
        params: {
            data: data
        }
    });
});

1

드롭 다운 목록의 텍스트를 알고 값을 모르는 경우 선택한 항목을 설정하려면 다음 예를 참조하십시오.

시간대를 알아 내고 설정하려고하지만 값이 설정되어 있다고 가정 해보십시오 time_zone_id.

        var timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
        var $select2 = $('#time-zone');
        var selected = $select2.find("option:contains('"+timeZone+"')").val();
        $select2.val(selected).trigger('change.select2'); 

0
// Set up the Select2 control
$('#mySelect2').select2({
    ajax: {
        url: '/api/students'
    }
});

// Fetch the preselected item, and add to the control
var studentSelect = $('#mySelect2');
$.ajax({
    type: 'GET',
    url: '/api/students/s/' + studentId
}).then(function (data) {
    // create the option and append to Select2
    var option = new Option(data.full_name, data.id, true, true);
    studentSelect.append(option).trigger('change');

    // manually trigger the `select2:select` event
    studentSelect.trigger({
        type: 'select2:select',
        params: {
            data: data
        }
    });
});

폰트 : 문서 2 개 선택


0

get / set 메소드를 사용하여 값을 설정할 수 있습니다.

$("#select").select2("val"); //get the value
$("#select").select2("val", "CA"); //set the value

또는 당신은 이것을 할 수 있습니다 :

$('#select').val("E").change(); // you must enter the Value instead of the string
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.