Javascript: кросс-браузерное решение для выделения всего текста внутри текстового поля в фокусе - PullRequest
6 голосов
/ 28 июля 2011

Я после следующей функциональности:

  • пользователь нажимает или вкладывает текстовое поле
  • весь текст в текстовом поле выделен, если текстовое поле уже не было в фокусе, в этом случае должна выполняться функция щелчка / выбора по умолчанию

Возможно ли это?


Это работает в Firefox 5
$('input[type="text"]').live('focus', function () {
    this.select();
});

http://jsfiddle.net/HmQxZ/13/

Chrome и IE8 выделяют весь текст всего за доли секунды


Это работает * в Chrome
$('input[type="text"]').live('click', function () {
    this.select();
});

http://jsfiddle.net/HmQxZ/12/

Firefox и IE8 выделяют весь текст, но при последующем щелчке текст остается выделенным.

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

Ответы [ 4 ]

9 голосов
/ 28 июля 2011

Просто задержите его на миллисекунду с помощью setTimeout:

$('input[type="text"]').live('focus', function() {
    var inp = this;
    setTimeout(function() {
        inp.select();
    }, 1);
});

http://jsfiddle.net/HmQxZ/14/

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

0 голосов
/ 28 июля 2011

Не забудьте сделать return false; event.stopPropagation(); event.preventDefault() примерно так:

$('input[type="text"]').live('click', function (event) {
    this.select();
    event.stopPropagation();
    event.preventDefault();
    return false;
});

http://jsfiddle.net/7rYLV/

0 голосов
/ 28 июля 2011

Если вы можете использовать jQuery, вы можете сделать что-то вроде:

$("#myInputField").focus(function(){
    // Select input field contents
    this.select();
});

// Add this behavior to all text fields
$("input[type=text]").focus(function(){
    // Select field contents
    this.select();
});

Взято из ЗДЕСЬ

0 голосов
/ 28 июля 2011

Вы можете добавить

event.preventDefault();
return false;

к вашей функции (первая). Это может исправить другие браузеры.

Также добавьте event к функции sig:

$('input[type="text"]').live('focus', function (event) {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...