인프런 커뮤니티 질문&답변

배고픈 잉어님의 프로필 이미지
배고픈 잉어

작성한 질문수

Vue.js - Django 연동 웹 프로그래밍

bootstrap 팝업창 만들기

bootstrap 팝업창 만들기 단원에서 질문있습니다.

작성

·

726

0

게시판에서 삭제 버튼이 눌리지 않아

data-toggle , data-target은

data-bs-toggle, data-bs-target 으로 수정하여 버튼 눌러서 모달창 팝업까지는 해결하였습니다.

하지만 모달창에

body-text는 todo내용이 아닌 body-text 문자 그대로 보여주고

delete 버튼을 눌러도 내용이 삭제 되지않습니다.

버젼이 틀려서 스크립트에서 id,name,todo를 받아오지 못하는거 같은대 아무리 찾아봐도 해결법을 모르겠습니다.

답변 5

1

김석훈님의 프로필 이미지
김석훈
지식공유자

독자님. 아래처럼 해 보세요. element.setAttribute(속성명, 속성값)

modalFooter.setAttribute('href', '/todo/' + id + '/delete2/')

 

0

답변 감사합니다 !
제가 질문을 자세히 하지 않은 것 같아 다시 질문 드립니다.
image
모달창에 text를 띄우는 것까지는 완료하였지만,
삭제에 대한 작업이 정상적으로 이루어지지 않고 있습니다.

 

아래 코드 중 modalFooter.setAttribute = ('href', '/todo/' + id + '/delete2/')
에 해당하는 부분을 어떤 식으로 바꿔야 할지 알려주시면 감사하겠습니다 !

0

김석훈님의 프로필 이미지
김석훈
지식공유자

안녕하세요. 독자님.

bootstrap v5.2 에서는 data-bs-whatever 라는 키워드로 바뀌어서, data-xxx 가 아니라 data-bs-xxx 로 해줘야 합니다. 그래서 HTML 부분과 Javascript 부분을 아래와 같이 변경해 보세요.

data-bs-id="{{todo.id}}" data-bs-name="{{todo.name}}" data-bs-todo="{{todo.todo}}"
    const id = button.getAttribute('data-bs-id')
    const name = button.getAttribute('data-bs-name')
    const todo = button.getAttribute('data-bs-todo')

 

 

0

같은 질문입니다.

bootstrap 버전업 및 코드 수정하여
name에 따른 todo를 모달 창에 띄우는 것까진 해결하였으나, 삭제에 대한 방법을 모르겠어서 글 올립니다.

아래 html 파일 올려드립니다

 

{% extends 'base.html' %}

{% block title %}todo_from.html{% endblock %}
{% block extra-style %}
<title>Vue-Django ToDo App</title>

<style>
    body {
        text-align: center;
        background-color: #ddd;
    }
    .inputBox {
        margin: auto;
        width: 70%;
        background: white;
        height: 50px;
        border-radius: 50px;
        line-height: 50px;
    }
    .inputBox .name {
        border-style: none;
        border-bottom: 1px solid #ddd;
        width: 90px;
        padding-left: 20px;
        line-height: 20px;
    }
    .inputBox .item {
        border-style: none;
        border-bottom: 1px solid #ddd;
        width: 400px;
        margin-left: 50px;
        padding-left: 20px;
        line-height: 20px;
    }
    .todoList {
        list-style: none;
        padding: 10px 0;
        text-align: left;
    }
    .todoList li {
        display: flex;
        height: 50px;
        line-height: 50px;
        margin: 0.5rem 0;
        padding: 0 0.9rem;
        background: white;
        border-radius: 5px;
    }
    .removeBtn {
        margin-left: auto;
        font-size: 20px;
    }
    .removeBtn:hover{
        color: red;
    }
    .modal-footer a {
        color: white;
    }
</style>
{% endblock %}

{% block content %}
<div id='app'>

    <h1>My Todo App !</h1>
    <strong>서로 할 일이나 의견을 공유해 봅시다.</strong>
    <br>

    <form class="inputBox" action="." method="post"> {% csrf_token %}
        <input class="name" type="text" placeholder="name ..." name="name">
        <input class="item" type="text" placeholder="type anything welcomed ..."
            name="todo">
        <button type="submit" class="btn btn-info btn-sm">ADD</button>
    </form>

    <ul class="todoList">
        {% for todo in object_list %}
        <li>
            <span>{{ todo.name }}:: {{ todo.todo }}</span>
            <span class="removeBtn" data-bs-toggle="modal" data-bs-target="#myModal"
                  data-id="{{todo.id}}" data-name="{{todo.name}}" data-todo="{{todo.todo}}">&#x00D7</span>
        </li>
        {% endfor %}
    </ul>

    <!-- Modal -->
    <div class="modal fade" id="myModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <h5 class="modal-title fs-5" id="exampleModalLabel">Are you sure to delete ?</h5>
                </div>
                <div class="modal-body">
                    body-text
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-secondary btn-sm" data-bs-dismiss="modal">Cancel</button>
                    <button type="button" class="btn btn-danger btn-sm"><a href="">Delete</a></button>
                </div>
            </div>
        </div>
    </div>

</div>
{% endblock %}

{% block extra-script %}
<script>

myModal.addEventListener('show.bs.modal', event => {
    const button = event.relatedTarget
    const id = button.getAttribute('data-id')
    const name = button.getAttribute('data-name')
    const todo = button.getAttribute('data-todo')

    const modalBody = myModal.querySelector('.modal-body')
    const modalFooter = myModal.querySelector('.modal-footer a')

    modalBody.textContent = name + '::' + todo
    modalFooter.setAttribute = ('href', '/todo/' + id + '/delete2/')
})
</script>
{% endblock %}

0

김석훈님의 프로필 이미지
김석훈
지식공유자

안녕하세요. 독자님.

부트스트랩 버전이 현재는 5.2 이군요. 독자님도 5.2 버전을 사용하고 계신가요 ?

예전 부트스트랩에서는 jQuery 를 사용했으나 현재는 jQuery 를 사용하지 않아서 발생하는 에러로 보입니다.

아래 사이트가 강의에서 사용한 모달의 v5.2 버전 소스 입니다. 소스가 비슷하니 (javascript 부분은 많이 바뀜), 강의를 참고해서 시도해 보기 바랍니다.

https://getbootstrap.com/docs/5.2/components/modal/#varying-modal-content

그래도 안되면 html 파일을 올려 주세요. 제가 실행해 보겠습니다.

감사합니다.

배고픈 잉어님의 프로필 이미지
배고픈 잉어

작성한 질문수

질문하기