我有一个用ajax发送的表单。 在这种形式中有x输入文件,每个文件都有2个输入文本。
当我发送表格时,所有文件都是同时发送的。
所以我想做的是用他的2个输入文本一次发送一个文件。
我的代码是:
的 HTML 的
<div id="img_upload">
<form action="#" id="form" method="POST" enctype="multipart/form-data">
<div id="img_upload_head">
<?php
require MODULE.DS."galerie".DS."traitement".DS."galerie".DS."recup.php";
?>
<label for="nbImg">Selectionner le nombre d'image que vous voulez inserrer : </label>
<select name="nbImg">
<?php $nb = 10;
for ($i= 0; $i<=$nb; $i++){
?>
<option name="<?php echo $i;?>"><?php echo $i;?></option>
<?php
}
?>
</select>
</div>
<div id="img_upload_content">
<div id="content_head">
<div class="title_name">Selection fichier</div>
<div class="title_desc">Description</div>
<div class="title_price">Prix</div>
<div class="title_error">status</div>
</div>
<div id="content_list">
</div>
</div>
<div id="img_upload_foot">
<input type="submit" name="send" value="send" id="send" />
</div>
</form>
的 JS 的
$(document).ready(function(){
$("select[name=nbImg]").hide();
$("#send").hide();
$("select[name=gal]").change(function(){
var galSelect = $(this).val();
if (galSelect != "none"){
$("select[name=nbImg]").fadeIn("fast");
$("select[name=nbImg]").change(function(){
var selfElem = $(this);
var nbImg = selfElem.val();
$("#content_list").empty();
for (var i = 1; i <= nbImg ; i++){
$("#content_list").append("<p id=\"file#"+i+"\"><span class=\"name\"><input type=\"file\" name=\"img[]\"id=\"img\" /></span><span class=\"desc\"><input type=\"text\" id=\"desc\" name=\"desc\" /></span><span class=\"price\"><input type=\"text\" id=\"price\" name=\"price\" /></span><span class=\"error\"></span></p>");
}
$("#send").fadeIn("fast");
$("#send").click(function(e){
e.preventDefault();
var form = $(this).parents("form");
var p = form.find("p");
var action = "/module/galerie/traitement/traitimg.php";
var desc = form.find("input[name=desc]").val();
var gal = $("select[name=gal]").val();
var price = form.find("input[name=price]").val();
var formData = new FormData();
jQuery.each($(p).find('input[name^="img"]')[0].files, function(i, file) {
formData.append('img-'+i, file);
formData.append('desc', desc);
formData.append('price', price);
formData.append('gal', gal);
jQuery.ajax({
url :action,
type : "POST",
processData: false,
contentType: false,
data: formData,
success: function(formData){
}
});
});
return false;
});
});
}else{$("select[name=nbImg]").fadeOut("fast");}
});
我真的不知道是否可以这样做。
无论如何,感谢您提供的帮助
修改 的
所以我试过这个
for (var i = 1; i <= nbImg; i++){
jQuery.each($(p).find('input[name^="img"]')[0].files, function(i, file) {
var formData = new FormData();
formData.append('img-'+i, file);
formData.append('desc', desc);
formData.append('price', price);
formData.append('gal', gal);
jQuery.ajax({
beforeSend : function(){
$(".error").empty().append("<img src=\"/media/design/img/loader.gif\"/>");
},
url :action,
type : "POST",
processData: false,
contentType: false,
data: formData,
success: function(formData){
$(".error").empty().append("<img src=\"/media/design/img/v.png\"/>");
}
});
});
}
它同时发送所有文件,当我删除“for”循环时,它只发送第一个
jQuery.each($(p).find('input[name^="img"]')[0].files, function(i, file) {
var formData = new FormData();
formData.append('img-'+i, file);
formData.append('desc', desc);
formData.append('price', price);
formData.append('gal', gal);
jQuery.ajax({
beforeSend : function(){
$(".error").empty().append("<img src=\"/media/design/img/loader.gif\"/>");
},
url :action,
type : "POST",
processData: false,
contentType: false,
data: formData,
success: function(formData){
$(".error").empty().append("<img src=\"/media/design/img/v.png\"/>");
}
});
});