#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()
}