У меня есть страница, на которой пользователи могут загружать до 5 изображений в свой пост. Для ясности для пользователя я сделал так, что есть 5 пустых полей с отдельными полями ввода, например:
<span id = "enableFileUpload_1" class = "upload-image-svg-wrapper">
<input id = "imageUploadID_1" type = "file" accept = "image/*"/>
</span>
<span id = "enableFileUpload_2" class = "upload-image-svg-wrapper">
<input id = "imageUploadID_2" type = "file" accept = "image/*"/>
</span>
Чтобы справиться с этим, у меня есть JavaScript, который ищет событие onchange в первом поле:
jQuery(function($) {
var imageNumber = 1;
$('body').on('change', '#imageUploadID_'+imageNumber, function() {
$this = $(this);
file_data = $(this).prop('files')[0];
form_data = new FormData();
form_data.append('file', file_data);
form_data.append('action', 'file_upload');
form_data.append('security', blog.security);
$.ajax({
url: blog.ajaxurl,
type: 'POST',
contentType: false,
processData: false,
data: form_data,
success: function (response) {
alert("ok");
}
});
});
});
Это отлично работает для первого изображения, но кажется, что imageNumber
всегда равно 1, поэтому событие onchange срабатывает только для первого изображения/ввода и ничего не делает для остальных.
Вопросы
$('body').on('change', '#imageUploadID_1', function()
для каждого поля ввода, а затем заставить их вызывать одну и ту же функцию?Вы можете использовать jQuery, чтобы назначить один и тот же обработчик onClick для каждого диапазона с классом upload-image-svg-wrapper
. Вы уже написали код в обработчике для работы с любым изображением, по которому щелкнули, потому что вы использовали this
для получения данных формы.
$('span.upload-image-svg-wrapper > input').on('change', function() {
Выше вместо выделения всего тела документа мы указываем jQuery выбирать все span
с классом upload-image-svg-wrapper
, которые являются входными данными. А затем мы удаляем селектор из обработчика изменений.
Извините, я пропустил ввод в исходном ответе. Теперь он обновлен на случай, если кто-то еще наткнется на этот ответ.
Спасибо, это намного умнее! Я новичок в jQuery, спасибо за хорошее решение. Для тех, кто интересуется, мне пришлось добавить «> input», чтобы сделать его «span.upload-image-svg-wrapper> input»