Отмените выбор содержимого текстового поля с помощью JavaScript - PullRequest
11 голосов
/ 27 апреля 2009

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

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

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

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

//code....

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

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

Есть идеи?

Спасибо!

Ответы [ 8 ]

18 голосов
/ 08 июня 2010

что по этому поводу:

$("input").focus(function(){
  this.selectionStart = this.selectionEnd = -1;
});
8 голосов
/ 27 апреля 2009

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

3 голосов
/ 08 февраля 2011

Вам необходимо установить атрибуты 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
    });
  });
1 голос
/ 16 апреля 2012

Чтобы «сфокусировать определенное текстовое поле БЕЗ его выделения»: Я бы использовал часть исправленного плагина 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
0 голосов
/ 05 марта 2015

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

<input type="text" onblur="this.selectionStart = this.selectionEnd = -1;">
0 голосов
/ 16 июня 2012

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

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

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

//code....

$("#txt1").focus();
0 голосов
/ 08 июня 2010

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

   $(your_input_selector).attr('disabled', 'disabled');
   $(your_input_selector).removeAttr('disabled');
0 голосов
/ 27 апреля 2009

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

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

 //code....

 $("#txt1").skipFocus = true;
 $("#txt1").focus();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...