3

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

  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();
}
4

1 回答 1

0

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

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

jsfiddle 演示

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

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 pluginsetCaretPos()获得了函数的代码。该插件包含一个您可以使用的插件方法。.caret()

于 2013-04-07T00:06:56.777 回答