2012-05-01 2 views
0

Я нашел this question на переполнении стека и использовал код, указанный в верхнем ответе.Выбор текста textarea при табуляции

Это работает чудесно иначе, но есть перегиб; на моей странице у меня есть несколько текстовых полей. Фактически, селектор, который я использовал, был всего лишь "textarea".

Однако, когда «tabbing» из одного текстового поля в другое (с помощью клавиши Tab для перехода к следующему), по-видимому, событие фокусировки не срабатывает, и текст не выбирается.

Как изменить этот код для работы как по клику, так и по Tab?

JSFiddle здесь; http://jsfiddle.net/qQDbZ/ Я нахожусь в Chrome, и при нажатии на текстовое поле все выбирает, tabbing - нет.

+2

Можете ли вы просто скопировать код? – glarkou

+2

фокус должен обязательно срабатывать, когда пользователь вставляет в текстовую область. – jbabey

+0

Он отлично работает в Opera и Chrome (он правильно запускает событие onfocus). Однако не тестировалось в других браузерах. Можете ли вы предоставить нам пример и, пожалуйста, сообщите нам, в каких браузерах он не работает. – Styxxy

ответ

4

Я был в состоянии получить эту работу со следующим обходным:

$('textarea').focus(function() { 
    var $this = $(this); 
    $this.select().mouseup(function() { 
     $this.off('mouseup'); 
     return false; 
    }); 
}).keyup(function(e) { 
    if(e.which === 9) { 
     this.select(); 
    } 
}); 

Демо: http://jsfiddle.net/KfFPM/3/

Я тестировал выше в Chrome 21, Safari 6, Firefox 14, Opera 12 и IE 9 Я буду тестировать больше версий позже; Я доволен. Работает при перемещении вперед и сдвигается + назад.

Переплет для keydown не работал.

Я все еще думаю, что это обходное решение не должно быть ненужным. Мое лучшее предположение заключается в том, что браузеры webkit обнаруживают вкладку в качестве нажатия клавиши внутри текстового поля и, следовательно, снимают текст с текста, так же, как любой браузер, если бы у вас был текст, выбранный в текстовом поле, а затем начал вводить текст.

+0

Спасибо! Работает отлично :) - знаете ли вы, что это уже зарегистрированная ошибка в трекерах Webkit? –

2
$('input[type="textarea"]').keydown(function(event){ 
    var keypressed = event.keyCode || event.which, 
    tab = 9, 
    $this = $(this); 

    if(keypressed === tab){ 
     $this.next('textarea').focus(); 
    } 
}); 

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

0
$('textarea').focus(function() { 
    var $this = $(this); 
    $this.select(); 
}).keyup(function(e) { 
    if(e.which === 9) { 
     this.select(); 
    } 
}).off('mouseup',function(){ 
    return false; 
}) 
+1

Возможно, вы захотите изменить это магическое число на константу '$ .ui.keyCode.TAB', предоставленную jQuery. Это немного читаемо. –

+0

Кроме того, вы могли бы немного объяснить свой код? [Только ответы только на код] (http://meta.stackexchange.com/q/148272/284827) обычно не одобряются, поскольку, без объяснения причин, они не помогают вопроснику и другим, чтобы понять, что вы сделали. –

+1

Чтобы продолжить комментарий @ WaiHaLee, вы должны включить объяснение, почему ваш ответ решает проблему, которую нет в других ответах. –