Активуйте дію після вибору select2


79

Для пошуку я використовую бібліотеку select2 .
чи є спосіб викликати дію після вибору результату пошуку? наприклад, відкрити спливаюче вікно або просте попередження 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
Ви можете прив’язатись до події «зміни», у посиланні, яке ви дали, є дуже великий фрагмент коду для всіх прив’язок подій, розділ «Події».
Росс

Відповіді:


170

Дивіться розділ " Події документації"

Залежно від версії, один із наведених нижче фрагментів повинен дати вам потрібну вам подію, або просто замінити "select2-selecting" на "change".

Версія 4.0+

Події тепер у форматі: select2:selecting(замість select2-selecting)

Дякуємо Snakey за повідомлення про те, що це змінилося станом на 4.0

$('#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
Події мають інші назви в нових версіях (наприклад, 'select2: select'), див. Https://select2.github.io/examples.html
snakey

1
Події тут, у документі. Не очевидно зі стилем FAQ.
Pierre de LESPINAY

1
дзвінок "вибір" здійснюється безпосередньо перед тим, як встановлено значення. що призведе до: "console.log ($ (this) .val ())", що виводить порожнє значення
Джозеф Гроот Кормелінк

Коли я спробував те саме у своєму кутовому додатку, це дало мені неправильні значення. Припустимо, у опціях select2 є 4 значення. 1 хвилина, 5 хвилин, 1 година, щодня. Зараз використовується $ ('# yourselect'). On ("select2-selecting", function (e) {...} Це дало мені попереднє значення від того, що я вибрав.
Яш Джайн,

Замість цього я спробував $ ('# yourselect'). On ("select2-select"), function (e) {...} Це спрацювало для мене
Яш Джайн,

25

Були внесені деякі зміни в імена подій select2 (я думаю, у версії 4 та пізніших версіях), тому «-» змінено на «:» .
Дивіться наступні приклади:

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

Ви можете перевірити всі події на сайті плагіна 'select2': select2 Події


13

Це працює для мене:

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

Я не розумію, чому, але це спрацювало для мене, коли відповідь Тарека не буде. Я навіть отримав його відповідь на роботу в окремому проекті, але з якихось причин це був єдиний варіант, який дозволив моєму проекту працювати.
tokyo0709

@ tokyo0709 Це працює, оскільки .changeподія настає пізніше в серії виконання, ніж select2:selectподія. Для мене я намагався зафіксувати css select, select2:selectале хоча я бачив це в інспекторі, не міг його зафіксувати select2:select- коли я змінився на .changeце спрацювало, оскільки Select2 запускає select2:selectподію перед оновленням css для оригінального select .. трохи божевільний , на мою думку.
a20,

1
@ a20 часом легким обхідним шляхом є встановлення елементів dom css через html css, тому вам не доведеться чекати, поки механізм javascript наздожене. Це добре працює в деяких випадках.
yardpenalty.com

7

Відповідно до мого використання вище v.4 це буде працювати

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

І менш ніж до версії 4 це буде працювати:

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

Це не працює для мене. Я змінив наведений вище код на наведений нижче. e.params.args.data
Tushar Saxena

Це теж не спрацювало для мене, e.params.data через поле даних не знайдено для невизначеного. При детальному огляді не було встановлено поле параметрів для e. Для моєї проблеми мені просто потрібно було прочитати значення, тому 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);
});
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.