0

我有一个 Ajax 问题。

有一个输入字段,我想提交onblur()事件的更改值。这一切都很好,只是有一个恼人的闪烁。

我输入新值并点击离开。然后旧值在值更改为新值之前闪回......

我就是这样做的。我将一个onblur函数附加到输入元素:

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

该事件与 util 函数绑定:

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));
};

这一切都很简单。

4

1 回答 1

0

原来是我们的 Ajax 更新周期的产物:

  1. 前端的变化
  2. POST到后端
  3. COMET 更改通知从后端到前端
  4. 重绘前端

问题是通知被触发了两次——一次是在“新”值出现之前,然后是当它出现时,这导致了闪烁......

于 2014-02-19T20:08:55.743 回答