【问题标题】:How to unselect the text of a textbox when it gets focus, when tab is pressed?按下选项卡时,如何在获得焦点时取消选择文本框的文本?
【发布时间】:2013-04-06 23:44:50
【问题描述】:

我有一个连续的一系列文本框,用于输入时间。当用户返回到已经编辑过的文本框时,浏览器会突出显示该文本框中的文本。

  1. 如何在文本框获得焦点时取消选择其中的文本,以及
  2. 将光标设置在文本框中文本的开头?

我尝试了以下方法,但效果不佳:

在文本框焦点处理程序中:

var html = $("#MyTextArea").val();
$("#MyTextArea").focus().val("").val(html);

为文本框选择处理程序:

if (window.getSelection) {
    if (window.getSelection().empty) {  // Chrome
        window.getSelection().empty();
    } else if (window.getSelection().removeAllRanges) {  // Firefox
        window.getSelection().removeAllRanges();
    }
} else if (document.selection && document.selection.empty) {  // IE?
    document.selection.empty();
}

【问题讨论】:

标签: javascript jquery jquery-ui


【解决方案1】:

我认为问题在于浏览器在焦点处理程序执行之前不会选择文本。您可以尝试使用setTimeout() 来延迟您的代码,如下所示:

$('input').focus(function() {
    var $input = $(this);
    setTimeout(function() {
        setCaretPos($input[0], 0, 0);
    }, 0)
});

jsfiddle demo

这使用下面的方法来设置插入符号的位置。

function setCaretPos(element, begin, end) {
    if (element.setSelectionRange) {
        element.setSelectionRange(begin, end);
    } else if (element.createTextRange) {
        var range = element.createTextRange();
        range.collapse(true);
        range.moveEnd('character', end);
        range.moveStart('character', begin);
        range.select();
    }
}

如果您决定将焦点放在文本的末尾,您可以使用:

var end = $input.val().length;
setCaretPos($input[0], end, end);

学分:

我从jQuery mask plugin 获得了setCaretPos() 函数的代码。该插件包含一个.caret() 插件方法,您可以使用它。

【讨论】:

    猜你喜欢
    • 2014-03-03
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 2011-02-08
    • 1970-01-01
    • 1970-01-01
    • 2012-02-04
    • 1970-01-01
    相关资源
    最近更新 更多