Здравствуйте, перед описанием проблемы, вкратце изложу суть задачи. Есть форма, которая отправляет для дальнейшей обработки на сервер некие данные, включая файл с изображением
<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.
Возможно, я пошёл неправильным и заранее трудным путём, если есть другие пути решения задачи, прошу отписать.
Заранее спасибо за помощь.