Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用jQuery更改表单上传的一个值_Javascript_Jquery_Forms_Jquery Validate - Fatal编程技术网

Javascript 使用jQuery更改表单上传的一个值

Javascript 使用jQuery更改表单上传的一个值,javascript,jquery,forms,jquery-validate,Javascript,Jquery,Forms,Jquery Validate,我有一张表格 <form id="myForm"> <input type="text" name="e1" id="e1" value="1" /> <input type="text" name="e2" id="e2" value="2" /> <input type="text" name="e3" id="e3" value="3" /> <input type="text" name="e4" id="e4" va

我有一张表格

<form id="myForm">
  <input type="text" name="e1" id="e1" value="1" />
  <input type="text" name="e2" id="e2" value="2" />
  <input type="text" name="e3" id="e3" value="3" />
  <input type="text" name="e4" id="e4" value="4" />
  <input type="text" name="e5" id="e5" value="5" />
</form>
我不想在表单中提交确切的值,而是想更改其中一个值。相反,对于
$\u POST['e3']
,服务器应该接收值“333”而不是“3”

我不希望更改页面上输入的
#e3
值。我不希望使用隐藏的输入来实现这一点,也不希望手动创建要上载的对象。如何更改
data1
对象或
data2
对象以反映
#e3
的新值

编辑。data1和data2值的实例如下:

Object { 0=input#e1, 1=input#e2, 2=input#e3, more...}

[Object { name="e1", value="1"}, Object { name="e2", value="2"}, Object { name="e3", value="3"}, Object { name="e4", value="4"}, Object { name="e5", value="5"}]

就像另一个解决方案一样,您可以修改表单并对克隆的元素进行更改

e、 g

然后序列化克隆的表单并将数据发送到服务器


只需在提交元素之前更改元素的值,序列化数组将反映新值。然后在ajax之后(或者在为ajax序列化数据之后),可以轻松地将值更改回原始值

根据需要插入条件逻辑

submitHandler: function(form) {
    var original = $('#e3').val();   // original value
    $('#e3').val('your new value');  // insert new value
    // ajax() here                   // submit via ajax
    $('#e3').val(original);          // change the value back after the ajax is complete
}
也许您需要在
ajax()
complete
回调函数中更改回该值


演示:haim770以前将此作为答案发布,但后来他删除了它。我觉得不错。他为什么要删除它

var data1 = $('#myForm').find(':input');
var data2 = data1.serializeArray();
console.log(data1);
console.log(data2);
data2.forEach(function(i) { if (i.name === 'e3') i.value = '333' });
console.log(data2);

请注意我的要求“我不希望更改页面上的
#e3
输入值。”原因是我使用Ajax,并不总是重定向页面,因此我不希望用户看到这些更改。@user1032531,您没有显示Ajax,但是在ajax完成后更改值与在ajax之前更改值一样微不足道。老实说,我不认为这有什么问题。但是,我无法理解为什么不使用服务器端逻辑简单地更改值。。。那真的是最好的地方。以后再换回来很有意义!我觉得自己像个傻瓜。你介意我把你的答案改成这样吗,还是你愿意?关于更改服务器端的值,我有理由不这样做(如果您想知道,请告诉我)。@user1032531,我已相应地编辑了我的答案。我不需要知道为什么不能在服务器端执行此操作。但是,我很好奇为什么要更改窗体上的值。为什么不首先验证表单,以便正确输入值?换言之,如果你想超越它,有一个表格来收集数据有什么意义呢?谢谢。haim770以前有一个答案,但他一定是删除了它。类似于
data.forEach(函数(i){if(i.name=='e3')i.value='333'})
。好像他知道了什么,只是需要更正jQuery,不是吗?我的错,甚至他的JavaScript都很好。你认为他或你的答案是最好的吗?
submitHandler: function(form) {
    var original = $('#e3').val();   // original value
    $('#e3').val('your new value');  // insert new value
    // ajax() here                   // submit via ajax
    $('#e3').val(original);          // change the value back after the ajax is complete
}
var data1 = $('#myForm').find(':input');
var data2 = data1.serializeArray();
console.log(data1);
console.log(data2);
data2.forEach(function(i) { if (i.name === 'e3') i.value = '333' });
console.log(data2);