我使用这段代码尝试在用户聚焦于字段时选择字段中的所有文本。发生的事情是,它选择了所有的一秒钟,然后它被取消选择,输入光标留在我点击的地方…

$("input[type=text]").focus(function() {
   $(this).select();
});

我希望一切都能被选中。


当前回答

大多数这些解决方案的问题是,当在输入字段中更改光标位置时,它们不能正常工作。

onmouseup事件改变了字段中的光标位置,这是在onfocus之后触发的(至少在Chrome和FF中)。如果你无条件地丢弃鼠标,那么用户就不能用鼠标改变光标的位置。

function selectOnFocus(input) {
    input.each(function (index, elem) {
        var jelem = $(elem);
        var ignoreNextMouseUp = false;

        jelem.mousedown(function () {
            if (document.activeElement !== elem) {
                ignoreNextMouseUp = true;
            }
        });
        jelem.mouseup(function (ev) {
            if (ignoreNextMouseUp) {
                ev.preventDefault();
                ignoreNextMouseUp = false;
            }
        });
        jelem.focus(function () {
            jelem.select();
        });
    });
}
selectOnFocus($("#myInputElement"));

如果字段当前没有焦点,代码将有条件地阻止鼠标的默认行为。它适用于以下情况:

当字段未聚焦时单击 当域有焦点时单击 踏着踏着进入田野

我已经在Chrome 31、FF 26和IE 11中进行了测试。

其他回答

与原生JavaScript select()一起工作很好。

$("input[type=text]").focus(function(event) {
   event.currentTarget.select();
});

或者概括地说:

$("input[type=text]")[0].select()

找到一个很棒的解决方案阅读这篇文章

$(function(){

    jQuery.selectText('input:text');
    jQuery.selectText('input:password');

});

jQuery.extend( {
    selectText: function(s) { 
        $(s).live('focus',function() {
            var self = $(this);
            setTimeout(function() {self.select();}, 0);
        });
    }
});

我使用FF 16.0.2和jquery 1.8.3,所有的代码在答案不工作。 我使用这样的代码工作。

$("input[type=text]").focus().select();

这将完成工作,并避免您无法再通过鼠标选择部分文本的问题。

$("input[type=text]").click(function() {
    if(!$(this).hasClass("selected")) {
        $(this).select();
        $(this).addClass("selected");
    }
});
$("input[type=text]").blur(function() {
    if($(this).hasClass("selected")) {
        $(this).removeClass("selected");
    }
});

我总是使用requestAnimationFrame()来跳过内部事件后机制,这在Firefox中工作完美。还没有在Chrome上测试过。

$("input[type=text]").on('focus', function() {
    requestAnimationFrame(() => $(this).select());
});