Перетащить задачу в React JS с помощью кнопок

При перетаскивании, если нам нужно сначала сделать выбор, а после этого нужно отправить его, нажав кнопку, так какой тип функций или обработчиков событий мне нужно использовать?

Я попробовал отреагировать-красиво-днд, но все равно не получил удовлетворительного ответа. У меня есть такой выход

Вы должны поделиться своим кодом, а не картинкой. Предпочтительно использовать кнопку <> в редакторе вопроса, после чего можно будет добавить HTML, CSS и JavaScript.

chrwahl 23.05.2024 18:12

Чтобы прояснить вариант использования: элемент должен быть создан в целевой области как копия элемента в исходной области. Пользователь должен иметь возможность перетащить элемент ИЛИ выбрать тот же элемент из источника и нажать кнопку, чтобы скопировать его в цель. Это правильно? Создайте функцию, которая может выполнять копирование независимо от того, что может делать пользователь, например function copyElement(source_element, target){...}, а затем вызывайте эту функцию либо на основе перетаскивания пользователем, щелчка мыши, либо чего-то третьего.

chrwahl 23.05.2024 21:46
Поведение ключевого слова "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
2
78
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вот рабочий пример. Функция copy_element(id) занимается копированием элемента. Эта функция вызывается либо при событии перетаскивания, либо при нажатии copybtn.

const source = document.getElementById('source');
const target = document.getElementById('target');
const copy = document.forms.copyform;

source.addEventListener('dragstart', e => {
  let id = e.target.closest('.item').dataset.id;
  e.dataTransfer.setData('text/plain', id);
});

target.addEventListener('dragover', e => {
  e.preventDefault();
});

target.addEventListener('drop', e => {
  e.preventDefault();
  let id = e.dataTransfer.getData('text/plain');
  copy_element(id);
});

source.addEventListener('change', e => {
  let form = e.target.form;
  form.copybtn.disabled = !form.item.value;
});

copy.copybtn.addEventListener('click', e => {
  let id = e.target.form.item.value;
  copy_element(id);
});

function copy_element(id) {
  // copy the item from source
  let item = source.querySelector(`div[data-id = "${id}"]`);
  let clone = item.cloneNode(true);
  clone.draggable = false;
  // append the copy to target
  target.append(clone);
  // unselect the item and disable the copy button
  [...copy.elements].forEach(input => input.checked = false);
  copy.copybtn.disabled = true;
}
body {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  gap: 1em;
}

#source {
  grid-row: 1;
  grid-column: 1;
  border: solid thin gray;
  min-height: 300px;
}

section#target {
  grid-row: 1;
  grid-column: 3;
  border: solid thin gray;
  min-height: 300px;
}

div.item {
  background-color: #ddd;
  margin: .3em;
  padding: .3em;
  min-height: 3em;
}

#source input {
  display: none;
}

#source input:checked~.item {
  background-color: #aaa;
}
<section id = "source">
  <label>
    <input type = "radio" name = "item" value = "item1" form = "copyform" required>
    <div class = "item" data-id = "item1" draggable = "true">Some element</div>
  </label>
  <label>
    <input type = "radio" name = "item" value = "item2" form = "copyform">
    <div class = "item" data-id = "item2" draggable = "true">Another element</div>
  </label>
</section>
<form id = "copyform">
  <button name = "copybtn" type = "button" disabled>>></button>
</form>
<section id = "target"></section>

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