Здравствуйте, используется проект на Asp.Net MVC и есть форма на которой есть input type="file" на котором повешено правило. Задача состоит в том, чтобы сразу после того как мы выбрали изображение, проверить его на высоту и ширину. Вот код
<input type="file" name="FacebookImage" class="input-width-hundred-percent" data-rule-imageFacebookResolution="true" id="FacebookImage" />
Вот сама валидация
$.validator.addMethod("data-rule-imageFacebookResolution", function (value, elem, attrValue) {
var _URL = window.URL;
var file, img;
if ((file = elem.files[0])) {
img = new Image();
img.onload = function () {
alert("Width:" + this.width + " Height: " + this.height);
if (this.width < 520 && this.height < 290) {
return false;
}
return true;
};
img.src = _URL.createObjectURL(file);
}
return false;
}, "Минимальное разрешение должно быть 520 x 290);
Но проблема в самой функции onload, так как она асинхронна, то даже если я загружаю изображение с правильным разрешением, то ошибка валидации всё равно остается и соответственно форма валидацию не проходит. На кнопку сохранить повешено следующее:
$("#SaveBtn").click(function () {
var form = $("#ettings");
form.validate();
if (form.valid()) {
var data = new FormData(document.getElementById('settings'));
$.ajax({
url: '@Url.Action(MVC.Product.SocialShareEdit())',
type: "POST",
data: data,
processData: false,
contentType: false,
success: function () {
$("#modal").modal('hide');
$.ajax({
url: '@Url.Action(MVC.Product.SocialShareIconsPartial(Model.DeliveryType))',
type: "POST",
processData: false,
contentType: false,
success: function (message) {
$("#Icons").html(message);
}
});
}
});
}
});
Вопрос, как правильно провалидировать изображение? Можно как то без onload обойтись? Спасибо