我有一个具有一对多关系的数据库结构。在html表单中,有类似的输入,名称为' item []'或者'文件[]'使数据成为一个数组
<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提交表单,我该如何提交文件
答案 0 :(得分:4)
您可以使用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;
});
});
&#13;
<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>
&#13;
您可以在name属性中使用索引,例如<input type="text" name="item[1]" />
答案 1 :(得分:2)
您可以在更改时将“已更改”类添加到所需元素,并发送没有“已更改”类的元素的数据:
<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;
});
答案 2 :(得分:1)
var data = {};
$(function(){
$(document).on('change', 'input', function(){
data[this.name] = this.value;
});
});
您可以向输入添加更改事件,并将更改的值添加到数据对象或附加字段以形成数据。所以数据对象只包含更改的值。
您可以使用formdata发送文件数据。请参阅此链接。