jQuery .focus()在每个浏览器中的工作方式不同。怎么预防?

时间:2012-07-02 15:31:56

标签: javascript jquery focus

当我尝试.focus()时,我希望将注意力放在输入元素上,并在值的最后一个字符后面看光标。我在IE中看到它。

在safari / chrome输入中获得焦点并选择所有文本。 在firefox / opera中输入获得焦点,但光标在开头。

我该怎么做才能防止这种情况并为所有浏览器获得正确的行为?

这里有一个例子:http://jsbin.com/ozojol/edit#javascript,html

PS。 focus().val('').val(value)方法在IE中不起作用...还有哪些其他解决方法?

3 个答案:

答案 0 :(得分:7)

您可以在大多数浏览器中使用输入的selectionStartselectionEnd属性,并在IE中使用一些讨厌的TextRange内容。 9.以下是一些改编自an answer to a similar question的代码。

演示:http://jsbin.com/azapuy

代码:

function moveCaretToEnd(el) {
    if (typeof el.selectionStart == "number") {
        el.selectionStart = el.selectionEnd = el.value.length;
    } else if (typeof el.createTextRange != "undefined") {
        var range = el.createTextRange();
        range.collapse(false);
        range.select();
    }
}

var input = $('#i')[0];
input.focus();
moveCaretToEnd(input);

答案 1 :(得分:1)

有一个很棒的轻量级插件可以将插入符号移动到元素内容的末尾。的 jQuery Caret

<强> Live Demo

答案 2 :(得分:0)

唯一常见的行为是select(),它会在所有主要浏览器中选择输入文本(无法确认它是否适用于所有浏览器)。