Изображение не публикуется при использовании e.preventDefault () в jquery ajax

У меня возникла проблема с проводкой при отправке формы с использованием jquery ajax. У меня есть поле для загрузки нескольких изображений. в то время как я использую функцию e.preventDefault (), изображения не загружаются. но пока я отключу этот код. он остается прекрасным. вот мой фрагмент кода для разметки, js и php

HTML

<form class="shoform" id="contact-entry" name="contact-entry" action="project-up-eng.php" method="post" enctype="multipart/form-data"> <input class="pic" id="img" type="file" multiple="multiple" name="imgfile[]" /> <input class="submitbtn" id="submitbtn" type="submit" value="Add"></input> </form> 

JS

 $("#submitbtn").click(function(){ $("#contact-entry").submit(function() { /* Act on the event */ e.preventDefault(); $.post('project-up-eng.php',$(this).serialize(), function() { alert("OK"); }); }); }); 

PHP:

 mkdir("projects/".$_POST['name']); $path="projects/".$_POST['name']; for($i=0;$i<count($_FILES['imgfile']['size']);$i++) { $file = $path."/".$_FILES['imgfile']['name'][$i]; move_uploaded_file($_FILES['imgfile']['tmp_name'][$i],$file); } 

К сожалению, вы не можете отправлять формы с файлами через AJAX с классическим HTML. Когда вы вызываете e.preventDefault() , обычная загрузка файла не выполняется, а ваш $.post вы вызываете вручную, просто не может выполнить то, что вы хотите.

Вы можете загружать с помощью JavaScript в новых браузерах с новой функциональностью HTML 5. См. « Как загрузить файлы с помощью AJAX ».

Вы не указываете, на каком элементе вы хотите отключить функцию события по умолчанию.

В настоящее время существует два элемента #submitbtn и "# contact-entry"

Если вы хотите предотвратить #submitbtn, тогда

 $("#submitbtn").click(function(e){ // just check e in the bracket e.preventDefault(); $("#contact-entry").submit(function() { /* Act on the event */ // e.preventDefault(); this line removed $.post('project-up-eng.php',$(this).serialize(), function() { alert("OK"); }); }); }); 

Если вы хотите предотвратить # контакт-запись, тогда

 $("#submitbtn").click(function(){ $("#contact-entry").submit(function(e) { // just check e in the bracket /* Act on the event */ e.preventDefault(); $.post('project-up-eng.php',$(this).serialize(), function() { alert("OK"); }); }); });