Поиск лучшего обходного решения к Chrome выбирает на ошибке фокуса

У меня есть та же проблема как пользователь в этом вопросе, который происходит из-за этой ошибки в WebKit. Однако обеспеченное обходное решение не будет работать на мое приложение. Позвольте мне вновь заявить о проблеме так, чтобы Вы не шли, читает другой вопрос:

Я пытаюсь выбрать весь текст в текстовой области, когда это получает фокус. Следующий jQuery кодирует работы в IE/FF/Opera:

$('#out').focus(function(){
  $('#out').select();
});

Однако в Chrome/Safari текст выбран - очень кратко - но затем событие mouseUp запущено, и текст невыбранный. Следующее обходное решение предлагается в вышеупомянутых ссылках:

$('#out').mouseup(function(e){
  e.preventDefault();
});

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

35
задан Community 23 May 2017 в 12:09
поделиться

2 ответа

Как насчет этого?

$('#out').focus(function () {
    $('#out').select().mouseup(function (e) {
        e.preventDefault();
        $(this).unbind("mouseup");
    });
});
29
ответ дан 27 November 2019 в 07:03
поделиться

Создайте bool. Установите его в true после события фокуса и сбросьте его после события поднятия мыши. Если во время движения мыши вверх true, вы знаете, что пользователь только что выбрал текстовое поле; следовательно, вы знаете, что должны предотвратить движение мыши вверх. В противном случае вы должны его пропустить.

var textFieldGotFocus = false;

$('#out').focus(function()
{
    $('#out').select();
    textFieldGotFocus = true;
});

$('#out').mouseup(function(e)
{
    if (textFieldGotFocus)
        e.preventDefault();
});

$(document).mouseup(function() { textFieldGotFocus = false; });

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

2
ответ дан 27 November 2019 в 07:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: