Как остановить мой код, помещающий вкладки в мои текстовые поля

У меня есть этот фрагмент jQuery, чтобы определить, когда курсор находится внутри текстового поля. Идея состоит в том, чтобы выделить строку таблицы, в которой появляется текстовое поле.

$(".text").on("focus", function() { //do something });

Проблема в том, что этот код, похоже, регистрирует клавишу табуляции внутри текстового поля. Курсор по-прежнему будет перемещаться к следующему текстовому полю, когда я нажимаю клавишу табуляции. Однако он всегда вставляет табуляцию в поле!

Это очень неожиданно, и я должен признать, что меня это немного смущает...

Любая помощь в этом вопросе была бы блестящей, спасибо.


person G--    schedule 16.12.2014    source источник
comment
Можете ли вы настроить демонстрацию проблемы? Это звучит странно.   -  person Mathletics    schedule 17.12.2014
comment
Вот небольшая скрипка... jsfiddle.net/5cjbcy9o - попробуйте "перемещаться" по текстовым полям - он фактически вводит табуляцию в текстовое поле   -  person G--    schedule 17.12.2014
comment
Кажется, это как-то связано с предупреждением. Если я закомментирую строку с предупреждением, она не вставит символы табуляции.   -  person AJ Richardson    schedule 17.12.2014


Ответы (3)


Кажется, что alert(), которое вы отправляете в событии focus, странным образом прерывает работу. Вы можете исправить это, установив небольшой тайм-аут перед отправкой оповещения; это гарантирует, что предупреждение будет отправлено ПОСЛЕ того, как текстовое поле получит фокус и будет обработан ввод вкладки.

setTimeout(function() { alert("box selected"); }, 1);

http://jsfiddle.net/5cjbcy9o/2/

person AJ Richardson    schedule 17.12.2014

Дайте каждой строке индекс табуляции, подобный этому
var i=2; $('tr').each($(this).attr('tabindex',i++))

person moroccan_dev    schedule 17.12.2014

Предыдущий ответ касался прослушивания клавишу табуляции, проверив keyCode, чтобы увидеть, соответствует ли она 9. Однако ширина символа табуляции различается (также зависит от личных предпочтений), хотя обычно это два или четыре пробела. Таким образом, вы можете добавить этот пробел к значению вводимого текста при обнаружении события нажатия клавиши табуляции.

В следующем коде я решил использовать четыре пробела:

$(function () {
    $(".text").on("focus", function () {
        console.log("box selected");
    }).on("keydown", function(e) {
        if ((e.keyCode || e.which) == 9) {
            e.preventDefault();
            $(this).val($(this).val() + "    ");
        }
    });
});

См. демонстрацию концепции скрипта здесь: http://jsfiddle.net/teddyrised/5cjbcy9o/1/

person Terry    schedule 17.12.2014