드래그 앤 드롭은 DOM에 의해 생성 된 항목에서 'null'을 반환합니다.

DanielK

저는 현재 trello와 같은 앱에서 작업 중이며 드래그 앤 드롭 이벤트 및 DOM과 관련된 몇 가지 문제가 있습니다. 기본적으로 각각 ID가 " card-container"인 div를 포함하는 4 개의 목록이 있습니다 . 예상대로 소스 코드에서 만든 카드를 이동할 수 있지만 DOM을 통해 카드를 추가하고 다른 컨테이너로 이동하려고하면 컨테이너가 자식을 추가합니다 "null". 내가 뭘 잘못하고 있는지 확실하지 않습니다.

새 카드를 추가 할 때 makeCard()버튼을 제출 하면 기능 이 실행됩니다.

draganddorp.js

const card = document.querySelector('.task-card');
const cards = document.querySelectorAll('.task-card')
const cardContainers = document.querySelectorAll('.card-container');

var draggingCard = null;

// card listeners
cards.forEach(addCardListeners);

// Loop through taskContainer boxes and add listeners
cardContainers.forEach(addContainerListeners);

// Drag Functions
function dragStart(event) {
    this.className += ' card-hold';
    setTimeout(() => (this.className = 'invisible'), 0); //set timeout so card wont dissapear
    draggingCard = event.target;
}

function dragEnd() {
    this.className = 'task-card';
    draggingCard = null;
}

function dragOver(e) {
    e.preventDefault();
}

function dragEnter(e) {
    e.preventDefault();
    this.className += ' card-container-hover';
}

function dragLeave() {
    this.className = 'card-container';
}

function dragDrop() {
    this.className = 'card-container';
    this.append(draggingCard);
}

function addCardListeners(card) {
    card.addEventListener('dragstart', dragStart);
    card.addEventListener('dragend', dragEnd);
}

function addContainerListeners(cardContainer) {
    cardContainer.addEventListener('dragover', dragOver);
    cardContainer.addEventListener('dragenter', dragEnter);
    cardContainer.addEventListener('dragleave', dragLeave);
    cardContainer.addEventListener('drop', dragDrop);
}

makecard.js

function makeCard(destination) {
    //defining all variables needed for creating a card
    let getCardContainer = document.getElementById(destination);
    let createTaskCard = document.createElement("div");

    //varibles needed for task header
    let createTaskHeader = document.createElement("div");
    let createTags = document.createElement("div");
    let createTag = document.createElement("span");
    let createActionsBtn = document.createElement("div");

    //varibles needed for task body
    let createTaskBody = document.createElement("div");
    let createTaskTitle = document.createElement("p");

    //varibles needed for task footer
    let createTaskFooter = document.createElement("div");
    let createAsignee = document.createElement("div");
    let createAsigneeIcon = document.createElement("span");
    let createAsigneeMember = document.createElement("span");
    let createDueDate = document.createElement("div");
    let createDueDateDate = document.createElement("span");
    let createDueDateIcon = document.createElement("span");

    //creating card
    createTaskCard.className = "task-card";
    createTaskCard.setAttribute("draggable", true);

    //addding class/id and HTML to task header
    createTaskHeader.className = "task-card-header";
    createTags.className = "tags";
    createTag.className = "tag";
    createTag.id = "tag-";
    createTag.innerHTML = "someTags"
    createActionsBtn.className = "actions";
    //add action itself (svg)

    //addding class/id and HTML to task body
    createTaskBody.className = "task-card-body";
    createTaskTitle.innerHTML = "someTitle"

    //addding class/id and HTML to task footer
    createTaskFooter.className = "task-card-footer";
    createAsignee.className = "asignee";
    createAsigneeIcon.className = "icon";
    createAsigneeIcon.innerHTML = "I";
    createAsigneeMember.innerHTML = "Assignee name";
    createDueDate.className = "dueDate";
    createDueDateDate.innerHTML = "someDate"
    createDueDateIcon.className = "icon";
    createDueDateIcon.innerHTML = "I";

    //setting up structure
    createTaskHeader.appendChild(createTags);
    createTaskCard.appendChild(createTaskHeader);
    createTags.appendChild(createTag);
    createTaskHeader.appendChild(createActionsBtn);
    createTaskCard.appendChild(createTaskBody);
    createTaskBody.appendChild(createTaskTitle);
    createTaskCard.appendChild(createTaskFooter);
    createTaskFooter.appendChild(createAsignee);
    createAsignee.appendChild(createAsigneeIcon);
    createTaskFooter.appendChild(createDueDate);
    createAsignee.appendChild(createAsigneeMember)
    createDueDate.appendChild(createDueDateDate);
    createDueDate.appendChild(createDueDateIcon);

    //appending card to card container
    getCardContainer.appendChild(createTaskCard);
}

HTML

<div class="task-card" draggable="true">
    <div class="task-card-header">
        <div class="tags">
            <span class="tag">Priority</span>
            <span class="tag">Design</span>
        </div>
        <div class="actions">
            <a href="#">
               <!--icon-->
            </a>
        </div>
    </div>
    <div class="task-card-body">
        <p>Test</p>
    </div>
    <div class="task-card-footer">
        <div class="asignee">
            <span class="icon">
                <!--icon-->
            </span>
            <span>Daniel Kjellid</span>
        </div>
        <div class="dueDate">
            <span>23.05</span>
            <span class="icon">
                <!--icon-->
            </span>
        </div>
    </div>
</div>

CSS

.card-container {
  background: white;
  height: auto;
  margin: 2px;
  min-height: 150px;
  width: 115%;
}

.card-container-hover { 
  border: dashed 3px #F364A2 !important;
}

.card-dragging {
  display: absolute;
}

.card-hold {
  border: solid 5px #ccc;
}
.task-card {
  border-radius: 8px;
  box-shadow: 0 0 4px 0 rgba(0,0,0,0.50);
  color: #3E4C59;
  height: auto;
  margin-bottom: 13px;
  width: 100%;
}
2 상

makeCard(destination)함수 에서 새 카드를 만들 때 dragstart snd dragend 리스너를 추가하지 않는 것 같습니다. 따라서 draggingCard여전히합니다 (단지 dragStart 이벤트 리스너에서 발생하는) 설정되지 않았기 때문에 null입니다.

이것을 makeCard함수 끝에 추가해보십시오 .

addCardListeners(createTaskCard);

물론 실제 예제 없이는 도움을주기가 조금 어렵습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

각도 드래그 앤 드롭에서 "정의되지 않은 'then'속성을 읽을 수 없습니다."

반응에서 드래그 앤 드롭으로 제어 된 입력 생성

Actionscript 2.0 용 duplicateMovieClip에 의해 생성 된 객체에 대한 드래그 앤 드롭

각도 드래그 앤 드롭 항목을 별도의 컨테이너에 나열합니다.

Mojave-드래그 된 행보다 더 많은 항목이 기록되면 NSTableView에서 드래그 앤 드롭이 실패합니다.

HTML 요소의 드래그 앤 드롭에서 대상은 무엇을 의미합니까?

대상에 드래그 앤 드롭을 터치합니다.

각도 드래그 앤 드롭 : 항목을 드래그 앤 드롭 한 후 컨테이너에서 제거하면 안됩니다.

DukeScript에서 드래그 앤 드롭을 해결하는 방법은 무엇입니까?

오류 유형 오류 : Angular 7 드래그 앤 드롭에서 정의되지 않은 '길이'속성을 읽을 수 없습니다.

드래그 앤 드롭 Jquery UI에서 데이터 속성을 변경하는 방법은 무엇입니까?

드래그 앤 드롭을 통해 CocoaLumberjack을 iOS 프로젝트에 통합

getAttribute ()는 jsp의 드롭 다운 목록에 대해 null을 반환합니다.

Tkinter에서 드래그 앤 드롭을 끄는 방법은 무엇입니까?

QTreeView의 드래그 앤 드롭이 QImage를 보유하는 항목에서 실패합니다.

Neo4jRepository의 findAll 메서드는 중첩 된 속성에 대해 null을 반환합니다.

SQL은 지난주의 각 요일에 생성 된 레코드 수에 대해 0을 반환합니다.

드래그 앤 드롭으로 목록보기 항목을 한 목록에서 다른 목록으로 이동하는 방법은 무엇입니까? UWP C #

runSync 메서드에서 생성 된 객체의 값을 반환합니다.

vscode에서 드래그 앤 드롭을 끌 수 있습니까?

각도 드래그 앤 드롭: cdkDrag 항목이 중첩된 cdkDropLists에 드롭됨

드래그 앤 드롭 속성을 자바 스크립트의 요소에 추가하는 방법은 무엇입니까?

드래그 앤 드롭-내 모델에서 NSItemProvider 생성

드롭다운 목록은 영역에 정의된 범위 목록을 생성합니다.

내 MDI의 드래그 앤 드롭이 CRichEditView에 의해 차단되고 CRichEditView :: GetDocument에서 충돌이 발생합니다. 어떻게 재정의합니까?

CASE 문에서 임의로 생성 된 값이 NULL을 반환합니다.

Textarea에서 드래그 앤 드롭을 통해 텍스트 파일로드

여기 Maps API (JS) : GeoJSON로드 된 다각형이 속성 필드에 대해 null 값을 반환합니다.

하나의 함수 또는 클래스에서 여러 구성 요소에 대한 여러 드롭을 드래그 앤 드롭으로 처리하는 방법은 무엇입니까?

TOP 리스트

  1. 1

    Ionic 2 로더가 적시에 표시되지 않음

  2. 2

    JSoup javax.net.ssl.SSLHandshakeException : <url>과 일치하는 주체 대체 DNS 이름이 없습니다.

  3. 3

    std :: regex의 일관성없는 동작

  4. 4

    Xcode10 유효성 검사 : 이미지에 투명성이 없지만 여전히 수락되지 않습니까?

  5. 5

    java.lang.UnsatisfiedLinkError : 지정된 모듈을 찾을 수 없습니다

  6. 6

    rclone으로 원격 디렉토리의 모든 파일을 삭제하는 방법은 무엇입니까?

  7. 7

    상황에 맞는 메뉴 색상

  8. 8

    SMTPException : 전송 연결에서 데이터를 읽을 수 없음 : net_io_connectionclosed

  9. 9

    정점 셰이더에서 카메라에서 개체까지의 XY 거리

  10. 10

    Windows cmd를 통해 Anaconda 환경에서 Python 스크립트 실행

  11. 11

    다음 컨트롤이 추가되었지만 사용할 수 없습니다.

  12. 12

    C #에서 'System.DBNull'형식의 개체를 'System.String'형식으로 캐스팅 할 수 없습니다.

  13. 13

    JNDI를 사용하여 Spring Boot에서 다중 데이터 소스 구성

  14. 14

    Cassandra에서 버전이 지정된 계층의 효율적인 모델링

  15. 15

    복사 / 붙여 넣기 비활성화

  16. 16

    Android Kotlin은 다른 활동에서 함수를 호출합니다.

  17. 17

    Google Play Console에서 '예기치 않은 오류가 발생했습니다. 나중에 다시 시도해주세요. (7100000)'오류를 수정하는 방법은 무엇입니까?

  18. 18

    SQL Server-현명한 데이터 문제 받기

  19. 19

    Seaborn에서 축 제목 숨기기

  20. 20

    ArrayBufferLike의 typescript 정의의 깊은 의미

  21. 21

    Kubernetes Horizontal Pod Autoscaler (HPA) 테스트

뜨겁다태그

보관