Запуск Ajax POST для события onblur () - PullRequest
0 голосов
/ 31 июля 2009

У меня проблема с Ajax.

Существует поле ввода, и я хочу отправить измененное значение в событие onblur (). Все работает нормально, кроме раздражающего мерцания.

Я ввожу новое значение и щелкаю прочь. Затем старое значение мигает назад, прежде чем оно изменится на новое значение ...

Вот как я это делаю. Я прикрепляю функцию onblur к элементу ввода:

  onblurevent = function()
  {
    HN.Gui.HTML.post(bindingpage, bindingref, this.value);
  };
  HN.Util.addEvent(elem, "blur", onblurevent);

Событие связано с утилитой:

HN.Util.addEvent = function(obj, type, fn)
{
  if ( obj.attachEvent ) {
    obj['e'+type+fn] = fn;
    obj[type+fn] = function(){obj['e'+type+fn]( window.event );};
    obj.attachEvent( 'on'+type, obj[type+fn] );
  } else
    obj.addEventListener( type, fn, false );
};

И он запускает сообщение jquery при запуске:

HN.Gui.HTML.post = function(page, ref, value)
{
    var json = (value == "")
    ? {clear: "contents"}
    : {set: {formula: value}};

  var url = page + ref + "?attr";

  $.post(url, JSON.stringify(json));
};

Все довольно просто.

1 Ответ

0 голосов
/ 20 февраля 2014

Оказалось, артефакт нашего цикла обновления Ajax:

  1. изменение в передней части
  2. POST к концу
  3. COMET уведомляет об изменении внешнего интерфейса от внутреннего
  4. перерисовать интерфейс

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

...