Javascript:跨浏览器解决方案,用于选择焦点上文本框内的所有文本

时间:2011-07-27 23:34:03

标签: javascript jquery

我遵循以下功能:

  • 用户点击或标记到文本框
  • 文本框中的所有文本都被选中,除非文本框已经有焦点,在这种情况下应该发生默认的点击/选择功能

这可能吗?

<小时/> 适用于Firefox 5

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

http://jsfiddle.net/HmQxZ/13/

Chrome和IE8只会瞬间选择所有文字

<小时/> 这适用于Chrome浏览器

$('input[type="text"]').live('click', function () {
    this.select();
});

http://jsfiddle.net/HmQxZ/12/

Firefox和IE8选择所有文本,但在后续点击时,文本仍保持选中状态。

*种类有效,在文本框有焦点后,单击它会在选择所有文本和能够点击闪烁的插入符号所在的位置之间切换。这可能是可以接受的。

4 个答案:

答案 0 :(得分:9)

使用setTimeout

将其延迟一毫秒
$('input[type="text"]').live('focus', function() {
    var inp = this;
    setTimeout(function() {
        inp.select();
    }, 1);
});

http://jsfiddle.net/HmQxZ/14/

正在发生的事情是,在您选择文本后,其他一些浏览器事件正在设置选择。因此,等待一毫秒后,您将完成所有浏览器事件,然后选择文本。现在没有什么可以解除它。

答案 1 :(得分:0)

您可能想要添加

event.preventDefault();
return false;

到你的功能(第一个)。这可能会修复其他浏览器。

另外,将event添加到函数sig:

$('input[type="text"]').live('focus', function (event) {

答案 2 :(得分:0)

你应该记得这样做return false; event.stopPropagation(); event.preventDefault()

$('input[type="text"]').live('click', function (event) {
    this.select();
    event.stopPropagation();
    event.preventDefault();
    return false;
});

http://jsfiddle.net/7rYLV/

答案 3 :(得分:0)

如果您可以使用jQuery,那么您可以执行类似的操作;

$("#myInputField").focus(function(){
    // Select input field contents
    this.select();
});

// Add this behavior to all text fields
$("input[type=text]").focus(function(){
    // Select field contents
    this.select();
});

取自HERE