Как правильно использовать метод загрузки для чтения файлов HTML5

Я создаю загрузчик файлов, в котором пользователь выбирает фотографии одну за другой, используя ввод файла, и добавляет его в лоток (предварительный просмотр) с помощью API чтения файлов HTML. Моя проблема заключается в том, что когда выбрано первое изображение, оно добавляется в лоток один раз правильно, когда выбрано второе фото, оно добавляется дважды, когда выбрано третье, оно добавляется трижды. Это подразумевает n предварительных просмотров для n-й фотографии. Я не знаю, что делаю неправильно, пожалуйста, помогите. ‹code›введите описание изображения здесь‹/code›

Мой код

 //Event handler for image upload button click
   $('body').on('click', '#add-default-pic', function (event) {
    event.preventDefault();

    $('#default-pic-chooser').trigger('click');
    //Wait for #photo file input to change

    $('#default-pic-chooser').on('change', function () {
        if ($('#default-pic-chooser').val() !== '') {
            //Do checks to see if photo is valid
            if (isImage($('#default-pic-chooser').val())) {

            } else {

                $('.info').html('Sorry your picture format is not supported');
                $('#infoModal').modal();
                return;
            }
        }
        if (typeof (FileReader) != 'undefined') {
            reader = new FileReader();
            //Run this function when file is ready

            reader.onload = function (e) {
                img = e.target.result;
                $('.default-pics-area').append('<img src="' + img + '"  style="padding:0px; width:auto; height:auto; max-width:100%; max-height:150px;"/>');
                // alert("whats on:"+img);
                if ($('#default-pic-chooser').val() !== '') {

                    var route = base + '/pics/default/upload';
                    var photo = document.getElementById('default-pic-chooser').files[0]; //grapping photo file
                    // uploadPhoto(route,photo);
                    upload(route, photo, 'photo');
                }
            };
            //Trigger the onload function

            reader.readAsDataURL($(this) [0].files[0]);
        } else {
            alert('OOPS! you wont be able to preview your image because your browser does not support this feature...');
        }
    });
});

person Fenn-CS    schedule 18.03.2017    source источник


Ответы (1)


Удалите $('#default-pic-chooser').on('change'....) из обработчика кликов тела.

Потому что каждый раз, когда вы нажимаете #add-default-pic, вы добавляете новую функцию-обработчик change к #default-pic-chooser. Таким образом, когда вы запускаете click, он будет запускать функции одну за другой.

person wuxiandiejia    schedule 18.03.2017