2013-03-11 45 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'事件从未*适用于'