функция onload Javascript возвращает неопределенное значение

#javascript #jquery #image #height #width

Вопрос:

Я вызываю функцию JavaScript, в которой хочу проверить высоту и ширину изображения перед загрузкой. Я возвращаю false значение, но в исходной функции, когда это журнал консоли, он дает undefined .

Для лучшего понимания, пожалуйста, проверьте код. Код работает хорошо, но я хочу получить true и false от функций JavaScript.

 $(document).on('change', '#userfile', function() {
  var result = ValidateAuthorImage(event, $(this));
  console.log(result);
});

function ValidateAuthorImage(event, obj) {
  var files = event.target.files;
  var valid = true;
  var height = 0;
  var width = 0;
  var _URL = window.URL || window.webkitURL;
  
  for (var i = 0; i < files.length; i  ) {
    var img = new Image();
    img.onload = function() {
      height = img.height;
      width = img.width;
      //alert(width   " "   height);
      if (width < 700 || height < 500) {
        $("#msg_upload").html('<span style="color:red;">Please uplaod image with at least width = 700 and height  = 500 </span>');
        obj.value = "";
        return false;
      } else {
        $("#msg_upload").html('');
      }
    }
    img.src = _URL.createObjectURL(files[i]);
  }
}
 

Комментарии:

1. Пожалуйста, немного подробнее

2. Ваша функция только возвращает false . Однако более серьезная проблема заключается в том, что onload она фактически асинхронна, поэтому вы не можете возвращать что-либо из функции onload обработчика во внешнюю ValidateAuthorImage() область. Вам необходимо изменить шаблон, который вы используете для проверки размеров изображения, так как то, что вы пытаетесь сделать, невозможно. Я бы предложил проверить изображения и отобразить сообщение/ошибку рядом с изображением, которое не проходит проверку.

Ответ №1:

Это поможет вам выяснить, что пошло не так.

Поскольку вы ожидаете получить логический статус в ответ, верните значение true, если оно в порядке. верните false, если это не нормально. Вы «должны» вернуться либо с истиной, либо с ложью.

возврат без логического значения (или возврат по умолчанию) — это место, где вы получаете логический статус «неопределенный».

Ответ №2:

Я не знаю, есть ли еще какой-либо код, но ваши возвраты попадают в image.onload методы, которые даже не вызываются (или вы не указали ту часть, где вы его вызываете. Но, похоже, вы можете это сделать

   img.src = _URL.createObjectURL(files[i]);
  return img.onload()
}