Временное решение для выбора javascript в Webkit [Chrome / Safari] при ошибке фокуса (при использовании вкладки между полями) - PullRequest
1 голос
/ 08 марта 2011

похожая проблема появилась здесь: 3380458 :

При попытке выбрать фокус с помощью следующего jquery, он не работает в webkit:

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

По сути, Webkit [Chrome / Safafi] не выделяет весь текст в поле при фокусе.Это известная ошибка с обходным решением, как показано ниже.Этот предоставленный обходной путь, использующий jquery, работает, когда фокус происходит с помощью щелчка мыши:

$('#out').focus(function () {
    $('#out').select().mouseup(function (e) {
        e.preventDefault();
        $(this).unbind("mouseup");
    });
});

Проблема: этот обходной путь не работает, когда поле фокусируется нажатием клавиши табуляции (когда поле перед ним находится вфокус).Курсор появляется в начале поля, и текст не выделен.Я попробовал несколько вещей, но не могу превратить этот обходной путь в работу.

Очень признателен - Джеймс

Ответы [ 4 ]

3 голосов
/ 24 ноября 2012

Вот более простое решение без jquery:

onclick="var self = this;setTimeout(function() {self.select();}, 0);"
3 голосов
/ 08 марта 2011

Проблема, вероятно, возникла где-то в моем макете / CSS / javascript. По какой-то причине вкладка в поля в Chrome никогда не выделяет текстовое поле целиком. Фактически, вкладка в поле всегда должна выделять то, что находится в текстовом поле, даже без обходного пути, связанного с ошибкой webkit, как показано здесь во втором поле:

http://cornsyrup.org/~larry/select.html

В любом случае, пока я ищу настоящего виновника в этом беспорядке, я использую setTimeout в качестве обходного пути:

    $(document).ready(function() {
        $('.texty').focus(texty_focus);
    });
    function texty_focus() {
        var input = $(this);
        setTimeout(function() { 
            input.select();
        },10);
    }

Это имеет и другие преимущества для использования с мобильными браузерами (в частности, с iPad в моем случае), так что, хотя это не самое изящное решение, я сохраняю его.

2 голосов
/ 22 мая 2011

Я не знаю, почему происходит такое поведение, но этот хак работает:

// CODE FROM GWT
TexBox.addFocusHandler(new FocusHandler()
{
  public void onFocus(FocusEvent event) {
    Timer timer = new Timer() { 
      public void run() { 
        TexBox.setSelectionRange(0, 0);
      }
    }; 
    timer.schedule(10); // WAIT 1 MILLISECOND :)
  }
}

во время написания обработчика событий, просто подождите немного, прежде чем установить выбор в 0;

0 голосов
/ 09 августа 2011

Другой вариант:

var selectOnFocus = function (element) {
    if ($.browser.webkit) {
        element.click(function () {
            if ($(this).is(":focus")) {
                this.select();
            }
        });
    } else {
        element.focus(function () {
            this.select();
        });
    }
};
...