Отменить выбор содержимого текстового поля с помощью javascript

Я понимаю, что с помощью javascript вы можете выбрать содержимое текстового поля со следующим кодом (в jQuery):

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

Есть ли способ сделать обратное? Отменить выбор содержимого текстового поля? У меня есть фокусное событие серии текстовых полей, установленных для выбора содержимого внутри них. Есть моменты, когда я хочу сфокусировать конкретное текстовое поле БЕЗ выбора. То, что я планирую сделать, - это вызвать событие фокуса для этого конкретного текстового поля, но затем следовать ему с призывом отменить его выбор.

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

//code....

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

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

Любые идеи?

Спасибо!

Ответ 1

что об этом:

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

Ответ 2

Если вы просто назначаете значение текстового поля самому себе, он должен отменить выбор текста.

Ответ 3

Вам нужно установить атрибут selectionStart и selectionEnd. Но по какой-то причине установка этих событий фокуса не работает (я не знаю, почему). Чтобы заставить его работать, установите атрибуты через небольшой интервал.

  $(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
    });
  });

Ответ 4

Чтобы "сфокусировать конкретное текстовое поле без его выбора": Я бы использовал часть исправленный jquery-плагин 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

Ответ 5

Вместо того, чтобы выбирать и затем отменять выбор, почему бы не просто временно сохранить логическое значение в элементе dom?

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

 //code....

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

Ответ 6

Я хотел бы предложить простое решение

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

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

//code....

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

Ответ 7

Вот простое решение без jquery

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

Ответ 8

Если вы хотите отменить выбор текстового поля с помощью jQuery, выполните следующие действия:

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