У меня есть еще одно поле ввода - 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'), но теперь я понял это. Вот почему я не удаляю этот вопрос, хотя и сказал, что буду, так как это может помочь другим. Вы, ребята, если вы чувствуете, может удалить это. Спасибо.
Не вижу ibox2 нигде в коде.
Я все еще не могу воспроизвести его, не могли бы вы сделать фрагмент кода stackoverflow или jsfiddle?
Спасибо за ответ, господа. Код слишком длинный, включает много script разделов. Следовательно, я как бы опубликовал псевдокод. Это автозаполнение Google Place в сочетании с easyautocomplete. Кроме того, в данный момент я стараюсь избегать использования переменных global, которые могут выполнять эту работу.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Фокус возвращается к ibox1, потому что вы указываете своему документу делать это каждый раз, когда запускается событие onChange.
например: $(document).on("change", ibox1, funct... куда вы звоните ibox1.focus(); `.
Возможное решение: привяжите событие изменения к самому интересующему элементу и избегайте привязки события такого локального значения ко всему документу в будущем.
Я понимаю, что вы говорите, поскольку это пришло и ко мне. Но я подумал, что, поскольку я уже передал селектор ibox1, событие input будет привязано только к ibox1. Я ошибаюсь, сэр?
да, сэр., я думаю, что вы - используйте ibox1.on('change', function(e) {... вместо этого.
Спасибо, сэр. С радостью признаю, что был не прав. Следуя тому, что вы сказали, использовал ibox1.bind("input", function()...) вместо $(document).bind..., и это сработало отлично. Твои слова «потому что ты предписываешь это своему документу» стали для меня более понятными.
Используйте простой метод для присоединения события к входам. Проверьте код ниже, он может вам помочь.
(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
}
});
})();
Спасибо за ответ, сэр. selector.event это ключ, как вы и г-н Беким прекрасно поймали. Голосование за ваш ответ.
Добавьте все соответствующий код и создайте «фрагмент» прямо здесь, в своем вопросе, чтобы мы могли воспроизвести вашу проблему и дать более точные ответы.