2010-11-01 61 views
1

我有一个html页面,在ajax调用后显示大量数据行,在每一行中我都输入具有不同值的文本,用户可以编辑此文本输入,然后按一个按钮来做一些计算动作。仅从已更改的文本输入收集值

我该如何收集与JavaScript(jQuery)只有这个值已被更改,并将它们发送到PHP脚本。我搜索一个简单的方法,而不是保存所有大数值的旧值,然后与新值进行比较,是否有这样的解决方案?

回答

6

可以使用.data()功能,以保持他们的原件及复印件值,然后在提交时将其与其值进行比较以确保仅提交更改的值。

var inputs = $('input[type="text"]').each(function() { 
    $(this).data('original', this.value); 
}); 

$('#form').submit(function(){ 
    inputs.each(function() { 
     if ($(this).data('original') !== this.value) { 
      // Do something for the changed value 
     } else { 
      // And something else for the rest. 
     } 
    }); 
}); 

参见本演示此处http://www.jsfiddle.net/yijiang/twCE9/

+0

非常感谢你 – 2010-11-01 07:42:47

+0

我怎样才能保存每个输入的id? – 2010-11-01 07:47:29

+0

@Haim在ajax函数中使用的'data'对象中,可以使用'this.id'来获取当前元素的'id',就像我上面使用的'this.value'。 – 2010-11-01 07:52:05

1

您可以使用输入字段的onChange事件并为此收集某些隐藏字段或全局数组字段中的信息。

1

您绑定到每个数据输入的更改事件,并将这些名称 - 值对存储在全局数组或隐藏表单域中。

另一种方法是将“已更改”类添加到已编辑的每个字段。然后,当他们提交表单时,您可以创建一个仅改变了类的元素的新表单,也可以从包含所有文本输入的表单中删除其他元素。

<input type="text" class="data_input" name="name1" value="value1" /> 
<input type="text" class="data_input" name="name2" value="value2" /> 
... 
<input type="text" class="data_input" name="nameX" value="valueX" /> 
在JS

然后

$(document).ready(function() { 
    $(".data_input").change(function() { 
     $(this).addClass('changed'); 
    }); 

或者,如果你愿意使用全局数组:

var changedArr = []; 
$(document).ready(function() { 
    $(".data_input").change(function() { 
     changedArr.push({'name': $(this).attr('name'), 'value': $(this).val()}); 
    }); 
+0

我忘了说,这行与文本输入构建具有Ajax调用 – 2010-11-01 07:39:46

+0

使用'this.value'和'this.name'将节省你在传递给事件处理程序的匿名函数中创建一个新的jQuery对象。 – 2010-11-01 07:54:36