Добавленная JS форма не хочет работать
Всем доброго дня.
Средствами php+html на страницу добавляю форму: <form name="upload_form"> <div id="imageloadbutton"> <input id="photoimg" type="file" name="photos[]" multiple="true"/> </div> <div id="imageloadstatus" style="display:none"> <img src="include/upload_photo/loader.gif" alt="Загрузка ..."/><span>Идет загрузка...</span> </div> </form> Данная форма отлично работает. (обращаю внимание кнопки submit нет). По нажатию, открывается окно, выбираю стопку файлов , нажимаю ок, и все отправляется на сервер. Решил малость переделать страницу. Теперь добавляю форму кодом js:
kod += '<form name="upload_form">';
kod += '<div id="imageloadbutton">';
kod += '<input id="photoimg" type="file" name="photos[]" multiple="true"/>';
kod += '</div> ';
kod += '<div id="imageloadstatus" style="display:none">';
kod += '<img src="include/upload_photo/loader.gif" alt="Загрузка ..."/>';
kod += '<span>Идет загрузка...</span>';
kod += '</div>';
kod += '</form>';
Отображается форма нормально, но судя по всему просит кнопку submit. То есть показывает что файлы выбраны, и на этом все... Как сделать, чтобы форма работала без сабмита? Обработчик выглядит так
$('#photoimg').change(function() { ......}
|
Обработчик после всех этих манипуляций назначен?
|
Цитата:
|
Спасибо за внимание к моему вопросу. У меня скрипт обработки формы и скрипт вывода данной страницы находятся в одном файле. Структура его такая:
jQuery(document).ready(function ($){
....
тут скрипт ajax формы (см ниже)
...
});
.....
// нажатие на товар из списка для его последующего отображения
function open_item(iditem) {
$.ajax({
type: "POST",
url: "adm_editpost.php",
data: ("func=query_item&iditem="+iditem),
dataType: "JSON",
cashe: false,
success: function(response){
show_item(response);
},
error: (function() {
alert("Ошибка выполнения");
}),
});
}
....
вот скрипт ajax-обработчик полностью:
// функция ajax загрузки фото
// функция ajax загрузки фото
$('#photoimg').change(function() {
var file_data = $('#photoimg').prop('files');
function count(obj) {
var count = 0;
for(var prs in obj) {
if(obj.hasOwnProperty(prs)) count++;
}
return count;
}
for(var i = 0; i < count(file_data); i++){
var file_dat000 = $('#photoimg').prop('files')[i];
var form_data = new FormData();
form_data.append('file', file_dat000);
var iditem = $("#iditem").val();
form_data.append('iditem', iditem);
$.ajax({
url: 'include/upload_photo/ajax_upload.php',
dataType: 'text',
cache: false,
contentType: false,
processData: false,
data: form_data,
type: 'post',
beforeSend:function(){
$("#imageloadstatus").show();
$("#imageloadbutton").hide();
},
success: function(response){
$("#imageloadstatus").hide();
$("#imageloadbutton").show();
//alert(response);
show_picture(response);
},
error: function(){
$("#imageloadstatus").hide();
$("#imageloadbutton").show();
},
complete: function(){
$('#photoimg').val('');
},
});
}
});
|
var form_data = new FormData(); - должно объявляться один раз до цикла.
var file_dat000 = $('#photoimg').prop('files')[i]; form_data.append('file', file_dat000); Это не правильно, массив $_FILES будет содержать только последний файл из присланных. Ключ может быть один, но содержать массив. А $('#photoimg').prop('files')[i] - это вообще не то. А это что такое: var iditem = $("#iditem").val(); form_data.append('iditem', iditem); и тоже под одним ключом? |
Цитата:
$(document).on({
ajaxStart: /*действия при старте запроса*/,
ajaxStop: /*действия по окончании запроса*/
});
Это будет срабатывать для всех асинхронных запросов! |
Цитата:
В форме я выделяю несколько файлов. Далее циклом перебираю эти файлы. Например беру один файл добавляю в formdata, добавляю туда же переменную ид товара (чтобы обработчик понял куда загружать файл и как прописать его в БД). И так, в цикле, каждый файл вместе с переменной отправляю в обработчик. Все это работает |
var form_data = new FormData();
for(var i=0; i < this.files.length; i++) {
form_data.append('file[]', this.files[i]);
}
Это все что требуется. И получите на сервере в $_FILES под ключом file массив загруженных файлов. Обходите его циклом, проверяя ключ error и если он равен 0, производите другие необходимые проверки и действия, загружая файлы в каталог. Что такое $("#iditem").val(); и зачем? |
Цитата:
Подскажите пожалуйста в какое место файла добавить это скрипт- обработчик формы, чтобы он также полноценно работал? Подозреваю, что дело в области видимости вновь добавленной формы. |
Цитата:
При этом товар уже может иметь ранее добавленные изображения, которые можно заменить на новые, только в этом случае полем file можно выбрать только один файл. То есть сервер может получить для товара как новые файлы для замены имеющихся, так и новые добавляемые. И сделать это очень просто: name="file[id_товара][id_изображения]" - это обновляемые изображения name="file[id_товара][0][]" multyple - это новые, поле со множественным выбором $_FILES будет содержать:
[file => [
id_товара => [
0 => [
0 => [новое],
1 => [новое],
.....
],
id_изображения => [обновление],
id_изображения => [обновление],
.....
]
]
Что может быть проще. Если уж передавать id товара отдельно, то скрытым поле, а не через #id и целую кучу. Цитата:
|
| Часовой пояс GMT +3, время: 11:41. |