9

我目前想要关注第一个输入元素,而不选择输入元素内的预设值文本。如何聚焦我的输入元素,然后取消选择其中的文本?我目前关注的jQuery如下。

$(document).ready(function() {
    $("input[name='title']").focus();
});
4

6 回答 6

11

您可以使用selectionStartselectionEnd属性:

$(document).ready(function() {
    $("input[name='title']").each(function(){
        this.focus();
        this.selectionEnd = this.selectionStart;
    });
});
于 2012-07-09T22:31:29.447 回答
9
$(document).ready(function() {
    $("input[name='title']").focus();
    $("input[name='title']").val($("input[name='title']").val());
});
于 2012-07-09T22:33:53.103 回答
4

这是基于上述 Danilo Valente 的回答。我发现在 Chrome 上我必须在调用之前使用一点延迟this.selectionEnd = this.selectionStart,否则输入文本将保持选中状态:

这适用于我在 Chrome、Firefox、Safari 和 IE(已测试 IE 10)上

$("input").focus(function() {
    var input = this;
    setTimeout(function() { input.selectionStart = input.selectionEnd; }, 1);
});

这是一个演示:http: //jsfiddle.net/rangfu/300ah0ax/2/

于 2014-12-08T11:21:06.827 回答
0
$("input[name='title']").focus(function()
{ 
    var elem = $(this);

    elem.val(elem.val());
});
于 2012-07-09T22:31:45.490 回答
0

想添加一些增强的解决方案,也关心取消选择时的实际插入符号定位。

我使用了以下input元素方法:

<input (blur)="onLocalFocusOut()" (click)="onInputClick($event)" (mousedown)="onMouseDown($event)" />

这些方法如下所示:

public onInputClick(event: MouseEvent): void {
    if (!this._initialSelectAll) {
        (event.target as HTMLInputElement).select();
        this._initialSelectAll = true;
    }
}

public onMouseDown(event: MouseEvent): void {
    if (this._initialSelectAll) {
        (event.target as HTMLInputElement).selectionStart = (event.target as HTMLInputElement).selectionEnd = 0;
    }
}

public onLocalFocusOut(): void {
    this._initialSelectAll = false;
    this.onFocusChange(false);
}

这样的设置确保对于元素中的每个第click一个input,将选择所有字段内容。任何后续操作click都将清除选择并将插入符号定位在实际的鼠标单击坐标处。每当input元素失去焦点时,该逻辑将被重新初始化。

htmlcode是为它编写的,但angular 2+它很容易适应任何其他编码框架。

于 2021-06-26T16:14:43.987 回答
-2

不明智的购买可能会对您有所帮助

JSFiddle

基本:覆盖已经存在的内容...

$(document).ready(function() {
    $('#t1').focus();
    $('#t1').val($('#t1').val());                      
}); ​
于 2012-07-09T22:42:25.437 回答