[英]JQuery how to submit only changed fields when the form has some data array
我有一个具有一对多关系的数据库结构。 在html表单中,有类似的输入,其名称为“ item []”或“ file []”,以使数据成为数组
<form action="submit.php" method="get">
Name:<input type="text" name="name"/><br/>
Item:<input type="text" name="item[]"/><br/>
File:<input type="file" name="file[]" multiple/>
Item:<input type="text" name="item[]"/><br/>
File:<input type="file" name="file[]" multiple/>
Select:<select name="select" value="1" original="1">
<option value="1">One</option>
<option value="2">Two</option>
</select>
</form>
我该如何只提交更改的字段,并且在服务器端我可以确认更改了哪个项目? 我尝试禁用输入,但似乎不起作用。
另一个问题是,如果我使用ajax提交表单,该如何提交文件
您可以使用jQuery解决此问题,并在每个更改的input
上添加一个类
比您可以禁用所有没有该类的inputs
并提交表格
$(document).ready(function() { $('input, select, textarea').on('change', function() { $(this).addClass('changed'); }); $('form').on('submit', function() { $('input:not(.changed), textarea:not(.changed)').prop('disabled', true); // alert and return just for showing alert($(this).serialize().replace('%5B', '[').replace('%5D', ']')); return false; }); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <form action="submit.php" method="get"> Name:<input type="text" name="name" /><br/><br/> Item:<input type="text" name="item[]" /><br/><br/> File:<input type="file" name="file[]" multiple /><br/><br/> Item:<input type="text" name="item[]" /><br/><br/> File:<input type="file" name="file[]" multiple /><br/><br/> Select:<select name="select" value="1" original="1"> <option value="" selected="selected" disabled="disabled"></option> <option value="1">One</option> <option value="2">Two</option> </select><br/><br/> <button type="submit">send</button> </form>
您可以在name属性中使用索引,例如<input type="text" name="item[1]" />
您可以将“ changed”类添加到所需的更改元素上,并发送没有“ changed”类的元素的数据:
<form action="submit.php" method="get" id="myform">
Name:<input type="text" name="name"/><br/>
Item:<input type="text" name="item[]"/><br/>
File:<input type="file" name="file[]" multiple/>
Item:<input type="text" name="item[]"/><br/>
File:<input type="file" name="file[]" multiple/>
Select:<select name="select" value="1" original="1">
<option value="1">One</option>
<option value="2">Two</option>
</select>
<input type="submit" id="submit">
</form>
倾听变化:
$("input,select").on("change",function(){
$(this).addClass("changed");
})
通过ajax调用处理数据,并通过返回false阻止表单提交,并将更改的类重置为空:
$("#myform").on("submit",function(){
//Collecting data from changed class:
var data;
$(".changed").each(function(){
data=data+$(this).attr("name")+":"+$(this).val()+",";
});
//just removing last comma:
data=data.substring(0, data.length - 1);
//Submit data:
$.ajax({
...
data : { data },
...
success: function(){
//Removing changed class from all elements
$(".changed").removeClass("changed");
}
});
return false;
});
var data = {};
$(function(){
$(document).on('change', 'input', function(){
data[this.name] = this.value;
});
});
您可以将更改事件添加到输入,并将更改后的值添加到数据对象,或将字段附加到表单数据中。 因此,数据对象仅包含更改后的值。
您可以使用formdata发送文件数据。 请参考此链接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.