使用javascript取消选择文本框的内容

时间:2009-04-27 18:05:45

标签: javascript jquery dom focus

据我所知,使用javascript,您可以使用以下代码(在jQuery中)选择文本框的内容:

$("#txt1").select();

有没有办法做相反的事情?要取消选择文本框的内容?我有一系列文本框的焦点事件,用于选择其中的内容。现在有时候我想要关注特定的文本框而不选择它。我打算做的是为这个特定的文本框调用焦点事件,然后通过调用取消选择它。

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

//code....

$("#txt1").focus();

//some code here to deselect the contents of this textbox

有什么想法吗?

谢谢!

8 个答案:

答案 0 :(得分:18)

怎么样:

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

答案 1 :(得分:8)

如果您只是将文本框的值分配给自己,则应取消选择文本。

答案 2 :(得分:3)

您需要设置selectionStartselectionEnd属性。但由于某种原因,在焦点事件上设置这些不起作用(我不知道为什么)。要使其工作,请在一小段时间后设置属性。

  $(document).ready(function(){
    $('#txt1').focus(function(){
      setTimeout(function(){
        // set selection start, end to 0
        $('#txt1').attr('selectionStart',0);
        $('#txt1').attr('selectionEnd',0);
      },50);  // call the function after 50ms
    });
  });

答案 3 :(得分:1)

“在不选择的情况下聚焦特定文本框”: 我会使用patched jquery plugin jquery-fieldselection

的部分

使用它你可以打电话

$('#my_text_input').setSelection({"start":0, "end":0}); // leaves the cursor at the left

或使用此缩小版本将光标放在文本的末尾(默认情况下)

(function() {
var fieldSelection = {
    setSelection: function() {
        var e = (this.jquery) ? this[0] : this, len = this.val().length || ;
        var args = arguments[0] || {"start":len, "end":len};
        /* mozilla / dom 3.0 */
        if ('selectionStart' in e) {
            if (args.start != undefined) {
                e.selectionStart = args.start;
            }
            if (args.end != undefined) {
                e.selectionEnd = args.end;
            }
            e.focus();
        }
        /* exploder */
        else if (document.selection) {
            e.focus();
            var range = document.selection.createRange();
            if (args.start != undefined) {
                range.moveStart('character', args.start);
                range.collapse();
            }
            if (args.end != undefined) {
                range.moveEnd('character', args.end);
            }
            range.select();
        }
        return this;
    }
};
jQuery.each(fieldSelection, function(i) { jQuery.fn[i] = this; });
})();

以这种方式使用:

$('#my_text_input').setSelection(); // leaves the cursor at the right

答案 4 :(得分:0)

为什么不在dom元素上暂时存储一个布尔值,而不是选择然后取消选择?

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

 //code....

 $("#txt1").skipFocus = true;
 $("#txt1").focus();

答案 5 :(得分:0)

我想提出一个简单的解决方案

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

$("input[type=text]").blur(function() {
    $('input[type="hidden"][value=""]').select();
});

//code....

$("#txt1").focus();

答案 6 :(得分:0)

这是一个没有jquery的简单解决方案

<input type="text" onblur="this.selectionStart = this.selectionEnd = -1;">

答案 7 :(得分:-1)

如果要使用jQuery取消选择文本框,请执行以下操作:

   $(your_input_selector).attr('disabled', 'disabled');
   $(your_input_selector).removeAttr('disabled');