Дождаться отклика события, или проверка формы перед отправкой
Здравствуйте, перед описанием проблемы, вкратце изложу суть задачи. Есть форма, которая отправляет для дальнейшей обработки на сервер некие данные, включая файл с изображением
<form onsubmit="return Validate(this)" method="post" action="" enctype="multipart/form-data"> <input id="file" type="file" accept="image/*,image/jpeg,image/png" name="f"></input> ... <input class = "button" type="submit" value="upload" name="upload"></input> </form> До отправки на сервер, нам необходимо при помощи js проверить правильность заполнения данных, для этого служит функция Validate(this). Функция корректно отрабатывает кроме одного места, где необходимо проверить высоту и длину изображения. valid = false; window.URL = window.URL || window.webkitURL; function PostValidate(obj) { var file = obj.f.value; //проверяем параметры других элементов формы //...... // если загружаем файл if( file == "")) { var fileObj = document.getElementById("file"); //проверяем другие параметры файла //...... if(...) //если прошли предыдущие проверки { //собственно проблемный кусок var img = new Image(); img.src = window.URL.createObjectURL(fileObj.files[0]); img.onload = function() { if(img.width > 1000 || img.height > 1000) { valid = false; alert('error'); } else valid = true; } } } return valid; } Тут возникают странности. Если файл превышает заданные масштабы, то всё работает корректно и выводится сообщение с ошибкой, в противном случае необходимо два ража нажать на кнопку отправки, дабы на сервер были посланы данные из формы. Я предполагаю, что это из-за того, что в некоторых случаях скрипт не дожидается обработки результата события img.onload. Возможно, я пошёл неправильным и заранее трудным путём, если есть другие пути решения задачи, прошу отписать. Заранее спасибо за помощь. |
vid,
по img.onload вам нужно делать submit формы |
рони,
Спасибо, только возник следующий вопрос. Если добавить форме id <form id="myform" onsubmit="return Validate(this)" method="post" action="" enctype="multipart/form-data"> А в img.onload добавить //...... else { valid = true; document.forms["myform"].submit(); } Тогда форма принудительно отправляется, но видимо кнопка upload не считается нажатой, так как $_POST['upload'] пусто. Можно как-то сделать, чтобы post запрос, посланный submit не отличался бы от запроса посланного 'нормально'? Т.е. кнопка upload была как-бы нажата. |
vid,
function PostValidate(obj) { if (valid) return true; ещё строки 23 и 25 поменял бы местами -- попробовать клик на upload вместо document.forms["myform"].submit(); |
Часовой пояс GMT +3, время: 17:22. |