Webkit [Chrome / Safari]的解决方法javascript选择焦点错误(在字段之间使用选项卡时)

时间:2011-03-08 02:36:16

标签: javascript jquery google-chrome safari webkit

此处出现类似问题:3380458

尝试使用以下jquery选择焦点时,它在webkit中不起作用:

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

实际上,Webkit [Chrome / Safafi]不会在Focus上选择字段中的所有文本。这是一个已知的错误,其解决方法如下所示。当通过鼠标点击发生焦点时,使用jquery提供了解决方法:

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

问题:当通过按Tab键(当它之前的字段处于焦点时)聚焦字段时,此解决方法不起作用。光标出现在字段的开头,未选择任何文本。我尝试了一些方法,但无法按摩这种解决方法。

非常感谢 - 詹姆斯

4 个答案:

答案 0 :(得分:3)

问题可能源于我的layout / CSS / javascript中的某个地方。出于某种原因,Chrome中的字段标签从不突出显示整个文本框。事实上,即使没有webkit错误的解决方法,显示在字段中的内容应始终突出显示文本框中的内容,如SECOND字段中所示:

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)有其他好处,所以虽然它不是最优雅的解决方案,但我保留了它。

答案 1 :(得分:3)

这是一个更简单的解决方案,没有jquery:

onclick="var self = this;setTimeout(function() {self.select();}, 0);"

答案 2 :(得分:2)

我不知道为什么会出现这种情况,但这种黑客行为有效:

// 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;

答案 3 :(得分:0)

另一种选择是:

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