2009-07-30 84 views
0

我有一個Ajax問題。在onblur()事件上觸發一個Ajax POST

有一個輸入字段,我想在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)); 
}; 

這是非常簡單的。

+0

你可以發佈你在做什麼的代碼示例? – seth 2009-07-30 21:41:49

回答

0

原來是我們的Ajax更新週期的一種假象:

  1. 在前端的變化
  2. POST從後端備份結束
  3. COMET變化通知到前端
  4. 重繪前端

問題是通知觸發了兩次 - 一次在「新」值出現之前,然後是wh恩它,這是造成閃爍...