JS Как отслеживать изменения в поле, если оно меняется не вручную?

Добрый вечер, коллеги. Делаю Яндекс Карту на сайте. У меня есть поле в которое пользователь вводит название города, либо сообщает через браузер. При клике балуном на карте, адрес в поле меняется на тот что указан на карте. При "Сообщить ваше месторасположения?", поле заполняется тоже автоматом.
Проблема такова: Если сообщают свое месторасположение через браузер т.е. руками в поле Город ничего не пишут. То карта не обновляется и метка не ставится.

Я пытался отследить изменения таким образом:
$('#address').live('change', function() {
            alert( "Изменилось!" );
        });


Но при таком коде, он срабатывает только тогда, когда мы меняем руками. Как мне прицепить слушатель таким образом, что бы он применял его, когда меняется содержимое в блоке?
  • Вопрос задан
  • 1351 просмотр
Решения вопроса 1
@medin84
software developer
Не рекомендуется!
codepen.io/anon/pen/jrwByb
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
bigton
@bigton
Web-программист
$(document.body).on('change', '#address', function() {
alert( "Изменилось!" );
});
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
$('#address').on('change', function() {
      alert( "Изменилось!" );
});
Ответ написан
Комментировать
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
Если все изменения происходят через jQuery, то должен помочь такой хак:
void function($) {
  var old = $.fn.val
  $.fn.val = function val() {
    var r = old.apply(this, arguments);
    this.change();
    return r;
  }
}(jQuery);
Ответ написан
Комментировать
@void01
для события change контрол должен потерять фокус, а т.к. он его даже не получает, логично, что событие не срабатывает.

var oldVal = null;
var fixTime; // чтобы евент не стрелял на каждый новый символ в поле ввода

$('#address').on('myEvt', function() {
      alert("Суши весла! Поле поменялось");
});

window.setInterval(function(){
  if (oldVal == null){
  	oldVal = document.getElementById('address').value;
    return;
  } else if (oldVal!=document.getElementById('address').value){
  		oldVal = document.getElementById('address').value;
      fixTime = (new Date()).getTime();
      return;
  } else if (fixTime&&(new Date()).getTime() - fixTime > 5000) { //5 секунд задержка, перед запуском события
  	fixTime = null;
    oldVal = null;
    $('#address').trigger('myEvt');
  }
},500);


https://jsfiddle.net/z4udu2w7/
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы