2010-05-17 30 views
0

我們的網絡應用程序有一個窗體,其字段和值根據輸入的值而變化。每次在某個表單元素上發生更改事件時,我們都會使用昂貴的AJAX調用來更新頁面上的其他元素。當用戶點擊編輯後的鏈接時,如何從HTML文本字段捕獲更改事件?

這對於選擇,單選按鈕和複選框非常適用。當用戶將內容添加到文本字段,然後單擊鏈接而不從文本字段獲取焦點時,問題就出現了。瀏覽器移動到新頁面,並且文本字段的內容從不保存。有沒有簡單的方法來編碼?每次按鍵時,AJAX通話費用太高。

這裏是我的原型代碼的例子在此刻:

$$('.productOption input.text').invoke('observe', 'change', saveChangeEvent); 

回答

0

你有沒有考慮掛鉤到窗口unload()事件?這是一個使用.unload()的c/p jQuery示例。

$(window).unload(function() { 
    var input = $("#MyInput"); // Text field to check for 

    if(input.length > 0) 
    { 
    //Ajax call to save data, make sure async:false is set on ajax call. 
    } 
}); 

這使您可以在每次按鍵時通過製作一個電話,只要他們離開該頁面即可。

+0

如何通過AJAX調用告訴我要更新哪個字段? – 2010-05-17 22:56:43

+0

容易。保留一個名爲lastEditedField的變量,該變量通過keydown事件在輸入字段 – 2010-05-17 23:49:27

+0

上設置,希望這更有意義...只需在離開頁面時檢查值,然後使1 ajax調用以保存該值... – Zachary 2010-05-17 23:57:04

0

使用原型時,您可以讓一個PeriodicExecuter在輸入時進行監聽,並在沒有任何事情發生時發送ajax查詢。 2秒,自上次AJAX請求以來值已更改。使用焦點事件啓動執行程序並使用模糊事件將其關閉,這樣,您一次只需要一個執行程序

+0

不幸的是,如果用戶沒有真正完成,那麼AJAX請求會太破壞性。 – 2010-05-17 22:58:59

+0

真的嗎?這會暗示服務器代碼非常慢或者您在客戶端上做得太多。各地的搜索網站都使用ajax自動完成功能,而不會以負面方式干擾用戶體驗。 – 2010-05-17 23:33:50

+0

是的,服務器代碼非常慢。該應用需要調用我們無法控制的外部服務。 – 2010-05-18 14:24:13

相關問題