За последние 24 часа нас посетили 50552 программиста и 1690 роботов. Сейчас ищут 996 программистов ...

работа формы upload photo

Тема в разделе "JavaScript и AJAX", создана пользователем TigerZaka, 17 сен 2014.

  1. TigerZaka

    TigerZaka Активный пользователь

    С нами с:
    16 сен 2011
    Сообщения:
    189
    Симпатии:
    1
    Всем привет!

    Есть форма загрузки фотографий:
    Код (PHP):
    1. <input type="file" id="files" name="files[]" multiple>
    2. <output id="list"></output>
    3. <script src="/js/script.js"></script>
    И обработчик этой формы. при выборе фоток, появляются их превьюшки:
    Код (PHP):
    1. function handleFileSelect(evt) {
    2.     var files = evt.target.files; // FileList object
    3.  
    4.     for (var i = 0, f; f = files[i]; i++) {
    5.  
    6.         if (!f.type.match('image.*')) {
    7.             continue;
    8.         }
    9.  
    10.         var reader = new FileReader();
    11.  
    12.         reader.onload = (function (theFile) {
    13.             return function (e) {
    14.                     $("#list").append(
    15.                         $('<div/>').attr({'class': 'photoBlock'}).append(
    16.                                 $('<img/>').attr({'class': 'thumb', 'src': e.target.result, 'title': escape(theFile.name)}).append(escape(theFile.name))
    17.                         )
    18.                     )
    19.             };
    20.         })(f);
    21.  
    22.         reader.readAsDataURL(f);
    23.     }
    24. }
    25.  
    26. document.getElementById('files').addEventListener('change', handleFileSelect, false);
    27.  
    28. $('#list').on('keyup mouseup', '.thumb', function(evt) {
    29.     $(this).parent().remove()
    30. });
    Все работает отлично, но! Если форма добавляется на страницу динамически:
    Код (PHP):
    1. var photoLabel = $('<label/>').append('Добавить фото');
    2. var photoInput = $('<input/>').attr({'type': 'file', 'id': 'files', 'name': 'files[]'}).prop('multiple', true);
    3. var uploadList = $('<output/>').attr({'id': 'list'});
    4.  
    5. $('.uploadDiv').append(photoLabel, photoInput, uploadList);
    6.  
    То эскизы фотографий не появляются. Подскажите, как правильно сделать или куда копать
    Спасибо
     
  2. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    1. Несколько элементов на странице с одинаковыми id быть не должно! Даже, если это динамически добавленный элемент. Вместо id="files" сделайте класс class="files"
    2. Изменить строку
    Код (PHP):
    1. // эту
    2. document.getElementById('files').addEventListener('change', handleFileSelect, false);
    3. // на эту
    4. $('parent_static_selector').on('change', '.files', handleFileSelect); 
    Где "parent_static_selector" - это селектор ближайшего статичного родительского элемента для полей файла. В самом крайнем случае, можно даже взять"body", но это плохая практика.