Удаление фокуса из поля ввода, которое было сфокусировано ранее

#javascript #jquery #html

#javascript #jquery #HTML

Вопрос:

У меня есть еще одно поле ввода — ibox2 , на той же странице.

Проблема — После выполнения чего-либо ibox1 и оставления там значения длины > 5, если я начинаю вводить, ibox2 фокус возвращается к ibox1 .

Это тот if цикл с ibox1.focus() , который это делает. Как я мог бы полностью удалить фокус из ibox1 при щелчке снаружи и аннулировать if цикл и его инструкции.

Я пытался blur , но это не сработало.

 var ibox1 = $("#inputbox1");

$(document).on("change", ibox1,function(e) { 

   var valu = ibox1.val();

   if(valu.length > 5){

      #do something  
      ibox1.focus(); #used this as input box lost focus with each charater typed.    

   }

});

var ibox2 = $("#inputbox2"); #This is for google places autocomplete.
  

PS — Пожалуйста, не помечайте это как дублирующее, я перепробовал здесь почти все, и только потом опубликовал это. Я удалю его после получения решения.

Уважаемые модники, я последовал хорошему принятому ответу и допустил ошибку в понимании $ (‘document’), но теперь я ее очистил. Вот почему я не удаляю этот вопрос, хотя я сказал, что сделаю это, поскольку это может помочь другим. Вы, ребята, если чувствуете, могли бы удалить это. Спасибо.

Комментарии:

1. Пожалуйста, добавьте весь соответствующий код и создайте «фрагмент» прямо здесь, в вашем вопросе, чтобы мы могли повторить вашу проблему и предоставить лучшие ответы.

2. Не вижу ibox2 нигде в коде.

3. Я все еще не могу воспроизвести это, не могли бы вы, пожалуйста, создать фрагмент stackoverflow или jsfiddle?

4. Спасибо за ответ, господа. Код слишком длинный, включающий много script разделов. Следовательно, я вроде как опубликовал псевдокод. Это автозаполнение Google Place в сочетании с easyautocomplete. Кроме того, в данный момент я пытаюсь избежать использования global переменных, которые могли бы выполнить эту работу.

Ответ №1:

Фокус возвращается к ibox1 , потому что вы инструктируете свой документ делать это каждый раз при запуске onChange события.

например: $(document).on("change", ibox1, funct... куда вы вызываете ibox1.focus(); `.

Возможное решение: привяжите ваше событие изменения к самому интересующему элементу и избегайте привязки события такого локального значения ко всему документу в будущем.

Комментарии:

1. Я понимаю, что вы говорите, поскольку это пришло и ко мне. Но я подумал, что, поскольку я уже передал селектор ibox1 , input событие будет привязано только к ibox1 . Я ошибаюсь, сэр?

2. да, сэр., я думаю, что да — Используйте ibox1.on('change', function(e) {... вместо этого.

3. Спасибо, сэр. С радостью признаю, что я был неправ. Последовал тому, что вы сказали, использовал ibox1 .bind(«input», function() …) вместо $(document).bind... и это отлично сработало. Ваши слова `потому что вы инструктируете свой документ сделать это` теперь для меня более понятны.

Ответ №2:

Используйте простой метод для привязки события к входным данным. Проверьте приведенный ниже код, это может вам помочь.

 (function(){
  var in1 = jQuery('#input1'); // first input
  var in2 = jQuery('#input2'); // second input

  // On change of first input
  in1.change(function(){
    if(this.val().length > 5){
      // do something
    }
  });

  // On change of second input
  in2.change(function(){
    if(this.val().length > 5){
      // do something
    }
  });

})();
  

Комментарии:

1. Спасибо за ответ, сэр. selector.event это ключ, который вы и мистер Беким прекрасно уловили. Голосую за ваш ответ.