Всегда возвращать фокус на определенное поле ввода

Я не думаю, что на этот точный вопрос есть ответ где-либо еще.

У меня есть страница с парой полей ввода и множеством действий ajax для разных целей. Это онлайн-интерфейс POS. Когда выполняется любое из действий ajax, обычно нажатием кнопки, желательно всегда возвращать фокус в основное поле ввода штрих-кода.

Хотя это можно сделать, всегда вызывая $('#fieldid').focus() после любого из этих действий, мне было интересно, есть ли способ указать, что это поле всегда должно иметь фокус после любого действия. Существуют и другие поля ввода, в которых вам нужно ввести имя или что-то еще, поэтому очевидно, что он не может просто установить таймер и установить фокус на тайм-аут, поскольку вам нужно было бы дать время для ввода.

Одним из вариантов было бы иметь таймер, который всегда работает, и постоянно сбрасывать его при наборе текста. Это кажется, возможно, разумным, так как у этих полей действительно есть живой поиск при наборе текста, связанном с ними.

Возможно, я ответил на свой вопрос здесь, но любой лучший способ сделать это был бы очень признателен.


person user2204809    schedule 17.08.2014    source источник
comment
Честно говоря, это кажется очень специфическим, поэтому я был бы очень удивлен, если бы он действительно существовал. Лучше всего было бы идентифицировать их аналогичным образом, затем использовать магию селектора CSS, чтобы нацелить их всех с помощью JQuery, а затем вызвать фокус, как вы набрали.   -  person Daniel    schedule 17.08.2014
comment
это звучит так, как будто это может нарушить навигацию по вкладкам и, следовательно, доступность.   -  person dandavis    schedule 17.08.2014


Ответы (3)


Вы пытались использовать триггер фокуса в своем обратном вызове после добавления html?

Пример:

$.post(
    'ajax.php',
    { next:next },
    function(data){
        $('body').append($(data).hide().fadeIn('slow'));
        $('textarea').focus();
    }
);
person jagmitg    schedule 17.08.2014
comment
Привет, спасибо за это, но это в основном то, что я делал, и это работает, но я должен не забывать делать это для каждого вызова ajax, который я добавляю в систему. - person user2204809; 17.08.2014

Чтобы избежать повторяющегося кода для каждого вызова ajax,

используйте событие ajaxStop.

$.ajaxStop(function(){
    $('textarea').focus();
});
person Alpesh Panchal    schedule 09.12.2015

Вы можете использовать preventDefault(); функция в Javascript

person Muthukrishnan Kandasamy    schedule 07.09.2018