javascript - 任何字段更改时如何发送新值和旧值?

标签 javascript jquery ajax forms

我有一个包含多个输入字段、文本区域、单选按钮和复选框的表单。一旦任何字段中的值发生更改,我应该将带有字段名称、 和新值的 ajax 发送到我的服务器。我该怎么做?

更新。这是当前的方法:

oldValueHolder = null;
$('input[type="text"]').focus(function() {
  oldValueHolder = this.value; 
});

$('input[type="text"]').focusout(function() {
  if (this.value != oldValueHolder) alert(this.name + ': ' + oldValueHolder + ' -> ' + this.value);
});

$('input[type="checkbox"]').click(function(event) {
  alert(this.name + ': ' + !$(event.target).is(":checked") + ' -> ' + $(event.target).is(":checked"));
});

但我仍然不清楚如何用单选按钮做同样的事情。

Upd2. 下面是单选按钮的解决方案:

$('input[type="radio"]').change(function() {          
  alert(this.name + ': ' + $(this).parents("div.control-group").attr('data-original-value') + ' -> ' + this.value);
  $(this).parents("div.control-group").attr('data-original-value', this.value);
});

最佳答案

您需要在旧值更改之前捕获它。一种方法是:

  1. 当一个对象获得焦点时,在一个临时变量中获取它的值。
  2. 如果对象值发生变化,将新值和旧值通过ajax发送。

这样做的优势是您没有加载具有所有值的整个数组,您只是得到一个具有最后一个值的滚动临时变量获得焦点的对象。更少的内存使用。

更新: 使用 jQuery 将函数绑定(bind)到类“myClass”的所有输入上的焦点事件,例如:

HTML:

<input class="myClass" type="text" />

JS:

myUniversalOldValueHolder = null; // notice this is globally scoped.

$(".myClass").focus(function() {
    myUniversalOldValueHolder = this.value; // "this" is the <input> element, in this context
});

...并使用 $(".myClass").change() 来定义元素更改时要执行的操作。

jQuery 焦点():http://api.jquery.com/focus/

jQuery 更改():http://api.jquery.com/change/

关于javascript - 任何字段更改时如何发送新值和旧值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9315777/

相关文章:

ajax - Datatables 1.10.5 ajax 错误处理程序 - 访问 http 状态代码

javascript - 如何清除 select - html 标签下的选项值

javascript - 悬停时图像淡入新图像

javascript - 从 CreateJS/Animate 中的函数开始

c# - 在 ASP.Net MVC 5 中使用 DataTables 行重新排序更新值

javascript - 使用 jquery 切换 css

javascript - 无法使用jquery显示评论列表

javascript - 使用 $.when 从 ajax 方法填充全局变量后出现延迟异常

javascript - extjs 4.2.1 - 广播组 : add a radio button with a textbox

javascript - 使用字母选择对 Div 内容进行排序