Как применить более одного JavaScript onchange для нескольких полей ввода загрузки изображений

У меня есть страница, на которой пользователи могут загружать до 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 срабатывает только для первого изображения/ввода и ничего не делает для остальных.

Вопросы

  1. Мне нужно написать 5 разных $('body').on('change', '#imageUploadID_1', function() для каждого поля ввода, а затем заставить их вызывать одну и ту же функцию?
  2. Есть ли более разумный способ сделать это?
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать 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»

eligolf 09.02.2023 19:40

Извините, я пропустил ввод в исходном ответе. Теперь он обновлен на случай, если кто-то еще наткнется на этот ответ.

NetByMatt 10.02.2023 16:54

Другие вопросы по теме