select2 force focus при загрузке страницы

Я пытаюсь сделать окно select2 в его вопрос государство при загрузке страницы. Я попробовал следующее:

$('#id').select2('focus');
$('#id').trigger('click');
$('#id').trigger('focus');

Кажется, что только первая строка имеет какой-либо эффект, и она фокусирует поле select2, однако для отображения поля поиска и ввода строки поиска требуется дополнительное нажатие клавиши.

поэтому, если вы загрузите страницу и начнете вводить: "Поиск", "S" откроет окно поиска, а затем остальные ключи будет введен в него, так что вы будете искать "earch"

12 ответов


согласно документации Select2:

$('#id').select2('open');

должно быть все, что вам нужно.

под Программный Доступ на документация.


это работает в версии 3.4.2. Не уверен, когда именно это было реализовано.

$('#id').select2('focus');

Select2 создает свой собственный вход, так что попробуйте что-то вроде этого:

$(window).load(function(){
  $('#id').prev('.select2-container').find('.select2-input').focus();
});

если вы используете:

$('#id').select2('open');

select2 открывается, и вы можете ввести непосредственно для поиска.

если вы используете:

$('#id').select2('open').select2('close');

фокус установлен на созданный раскрывающийся список select2. Если вы нажмете Enter или Ctrl + Arrow down на вашей клавиатуре, вы можете открыть его.

лично думаю, что это лучше, чем:

$('#id').select2('focus');

потому что вы не можете открыть выпадающий список select2 с помощью клавиатуры.


Это то, что сработало для меня, и он также поместил мигающий курсор в поле ввода. Порядок имеет значение!

$('#s2id').select2('focus');
$('#s2id').select2('open');

я попробовал другие 2 ответа, но не очень повезло, может быть, потому, что я заполняю элемент управления через json, и в начале это просто скрытый вход, поэтому программный открыть метод не имеет никакого эффекта.

однако, следующее сделало это просто отлично для меня:

$(document).ready(function() 
{     
    $('#s2id_autogen1').focus();
});

Если по какой-то причине у вас нет того же идентификатора в вашей настройке, найдите элемент управления, имеющий select2-focusser - класс прилагается к нему.


у нас textfield в качестве select2 и использовал следующий фрагмент для активации и фокусировки курсора в текстовом вводе. Все остальные варианты не работали для нас, так как они только открывали опции select2, но не производили ожидаемого поведения.

$('#s2id_autogen1').click()
$('#s2id_autogen1').focus()

на Select2 4.0, метод .select2 ("фокус") ничего не делает. Тем не менее, мой обходной путь просто получал элемент "span" с атрибутом "Aria-labelledby" (обратите внимание, что значение основано на id, поэтому оно уникально) и фокусирует его:

var $field = $('select');
$field.select2();
var id = $field.attr('id');
var $spanLabel = $field.next().find("span[aria-labelledby='select2-" + id + "-container']");
$spanLabel.focus();

уже хорошо ответил Дэн-Нолан, но для тех, кто новичок в Select2 немного отметить: объект html должен быть intialized с select2 перед вызовом его функций:

таким образом, окончательный код должен быть

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

$('#id').select2('open');

на Select2 4.0.2 у меня проблема с select2('focus'). Список выглядит сфокусированным, но когда я нажимаю ENTER list, он не открывается.
Для меня это решение.

$('#id').select2();
$('.select2-selection', $('#id').next()).focus();
or
$('#id').next().find('.select2-selection').focus();

согласно документации select2:

$('document').ready(function(){
   var opencustomer = $("#changedatachange").select2();
   opencustomer.select2("open");
});

используйте этот sequece:

$('#id').select2('open');
$('#id').select2('close');