Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.11.2022, 18:10
Аспирант
Отправить личное сообщение для kuchuluk Посмотреть профиль Найти все сообщения от kuchuluk
 
Регистрация: 04.04.2014
Сообщений: 33

Почему при добавлении картинки через input и выводе ее на экран, она выводится 2 раза
Есть форма добавления картинки:
<div class="pic-container">
<div class="close-popup"></div>
<div id="dnd">
    <form action="<?= admin_url('admin-post.php'); ?>" method="post" enctype="multipart/form-data">
        <?php wp_nonce_field('regauthor_upload_file'); ?>
        <input type="hidden" name="action" value="registration_author" />
        <input type="hidden" name="redirect" value="<?= get_permalink(); ?>" />
        <input type="hidden" name="formNum" value="2" />
        <input id="fileElem" type="file" name="regauthor_upload_file" required />
        <label class="button" for="fileElem">Кликните или перетащите изображение</label>
    </form>
</div>


При добавлении картинки она с помощью js выводится на тут же в блоке div class="pic-container". Но при перетаскивании она нормально один раз выводится, а при добавлении через клик - 2 раза. Вот js код:
dnd.addEventListener('drop', event => {

  event.preventDefault();

  dnd.dataset.over = false;

  const text = event.dataTransfer.getData("text");

  if (text) {
    let img = document.createElement('img');
    img.src = text;
    picCont.appendChild(img);
  } else {

    var files = event.dataTransfer.files;

    [].map.call(files, file => {

      if (file.type.match(/^image/)) {

        let reader = new FileReader();

        reader.onload = file => {
            let img = document.createElement('img');
            img.src = file.target.result;
            picCont.appendChild(img);
            dnd.style.display = 'none';
            closePopup.style.display = 'block';
        }

        reader.readAsDataURL(file);
        inputImg.files = files;
        console.log(file);

      }

    })

  }
});

dnd.addEventListener('click', () => {
    inputImg.click();
    inputImg.addEventListener('change', event => {
        let curFiles = inputImg.files;
        console.log(curFiles.length);
        let reader = new FileReader();

        [].map.call(curFiles, file => {

          if (file.type.match(/^image/)) {

            let reader = new FileReader();

            reader.onload = file => {
              let img = document.createElement('img');
              img.src = file.target.result;
              picCont.appendChild(img);
              dnd.style.display = 'none';
              closePopup.style.display = 'block';
            }

            reader.readAsDataURL(file);
            console.log(file);

          }

        })
    });
});
Ответить с цитированием
  #2 (permalink)  
Старый 15.11.2022, 19:59
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,704

inputImg - это элемент <input id="fileElem" ... ?
Когда вы делаете inputImg.click(), событие всплывает и снова срабатывает событие click на dnd
Цитата:
Когда click() используется с поддерживающими его элементами (такими, например, как <input>), он вызывает срабатывание события клика мышкой. Это событие затем всплывает вверх по дереву элементов (или цепочке событий) и вызывает срабатывание уже их событий по клику мышкой.
https://developer.mozilla.org/ru/doc...LElement/click

Используйте inputImg.focus() вместо inputImg.click()

Последний раз редактировалось voraa, 15.11.2022 в 20:10.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заполнение поля input text при отметке checkbox через запятую mmn Javascript под браузер 2 14.10.2022 09:16
Почему при удалении и добавлении класса css анимация не повторяется? nastya97core Общие вопросы Javascript 7 06.05.2020 22:52
при выводе html кода через jquery все криво Satell Общие вопросы Javascript 0 19.03.2016 18:07
Не работают скрипты при выводе блоков через ng-include vsenetak Angular.js 0 13.01.2016 11:02
При добавлении DOCTYPE "плывут" размеры input type=text Demath (X)HTML/CSS 4 08.07.2012 19:27