Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.07.2013, 01:35
vid vid вне форума
Новичок на форуме
Отправить личное сообщение для vid Посмотреть профиль Найти все сообщения от vid
 
Регистрация: 09.07.2013
Сообщений: 2

Дождаться отклика события, или проверка формы перед отправкой
Здравствуйте, перед описанием проблемы, вкратце изложу суть задачи. Есть форма, которая отправляет для дальнейшей обработки на сервер некие данные, включая файл с изображением
<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.
Возможно, я пошёл неправильным и заранее трудным путём, если есть другие пути решения задачи, прошу отписать.
Заранее спасибо за помощь.
Ответить с цитированием
  #2 (permalink)  
Старый 09.07.2013, 02:35
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

vid,
по img.onload вам нужно делать submit формы
Ответить с цитированием
  #3 (permalink)  
Старый 09.07.2013, 20:43
vid vid вне форума
Новичок на форуме
Отправить личное сообщение для vid Посмотреть профиль Найти все сообщения от vid
 
Регистрация: 09.07.2013
Сообщений: 2

рони,
Спасибо, только возник следующий вопрос.
Если добавить форме 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 была как-бы нажата.
Ответить с цитированием
  #4 (permalink)  
Старый 09.07.2013, 21:36
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

vid,

function PostValidate(obj) { if (valid) return true;
ещё строки 23 и 25 поменял бы местами -- попробовать клик на upload вместо
document.forms["myform"].submit();
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AJAX проверка перед отправкой формы Tmin10 jQuery 4 16.11.2012 21:40
Проверка типа файла перед отправкой mav1 Элементы интерфейса 18 27.05.2012 19:28
Вызов урла перед отправкой данных формы на сервер brazerok Events/DOM/Window 3 31.05.2011 12:49
Верификация формы перед отправкой Катерина Общие вопросы Javascript 4 12.03.2010 15:03
Удалить ряд символов перед или после курсора до определенного сивола brd Javascript под браузер 3 30.10.2009 08:20