2013-03-11 32 views
0

我在頁面上有很多輸入元素,用戶可以改變。我不想提交表格。我只想在用戶更改其中一個元素內的值後更改數據庫值。通過ajax更新數據庫中的各個表單元素值?

我目前正在試驗綁定focusout到每個輸入。這是它通常完成的方式(Facebook等)?

$('input').focusout(function() { 
    var current_val = $(this).val(); 
    var preset_val = $(this).attr('rel');//attribute set with original value 
    if (current_val !== preset_val) { 
       alert ('Value changed.');//where I would post to php page to update database 
      } 
    });" 
+1

還有'[on] change'事件,試試看吧(用所有瀏覽器測試!) – 2013-03-11 15:14:31

+0

我不確定我是否理解這個問題,您是否在尋找代碼審查?數據綁定工作原理和JavaScript數據綁定技術的主題非常廣泛。檢查AngularJS,Knockout.js和Ember,這三個是實現這種事情的大型庫 – 2013-03-11 15:14:38

+1

是的,我自己也這樣做,我也是這樣使用的!如果當前值與原始值不同:'$(this).attr('defaultValue')!= $(this),我將綁定所有'input:text'上的'blur'事件並調用我的Ajax函數。 val()' – JoDev 2013-03-11 15:16:33

回答

1

「通常完成」的方式是等到用戶單擊按鈕保存或提交更改。如果您要更新每項更改,則應確保向用戶明確說明這一點。

要使用的適當事件將取決於您希望如何捕獲更改。對於按鍵更新,keyup適用於輸入,click適用於選擇和無線電/複選框。較不積極的將是blurchange

捕獲任何可能的變化非常主動的一種方法是將clickkeyup附加到表單元素本身。這也將節省向每個元素添加偵聽器的開銷。每次在表單上觸發事件時,都可以a)檢查原始目標,或者b)ajax整個表單,或者c)循環所有元素並檢測更改,只有ajax更改了字段。

onbeforeupload可以用來在窗口關閉的情況下對窗體進行最終檢查,但這可能有點過於誇張。

文檔

+0

'click'事件從未*適用於'