231020_TIL

고병옥·2023년 10월 20일
1

삼항연산자.. 안쓰다보니 문법도 어색하다
( a % 2 == 0 ) ? '수' : '박'

리뷰하던중 e.preventDefault(); 써놓은게 있었는데
정확한 설명이 되지않아 예시를 작성해보았다.

버블링관련 예제

<title>Document</title>
<style>
    .outer {
        border: 1px solid black;
        margin: 10px;
    }
</style>

<script>
    document.addEventListener('DOMContentLoaded', () => {
        document.querySelector('section').addEventListener('click', () => {
            console.log('section!');
        });
        document.querySelector('article').addEventListener('click', () => {
            console.log('article!');
        });
        document.querySelector('div').addEventListener('click', () => {
            console.log('div!');
        });
        document.querySelector('p').addEventListener('click', (e) => {
            // stopPropagation()는 부모 엘리먼트에게 이벤트 전달을 중단해야 할 때 쓰이는 함수
            e.stopPropagation();
            console.log('p!');
        });

        // key 이벤트 동작 순서
        // key event 사이의 동작 순서는 다음과 같다. keydown → keypress → keyup
        // 하지만, 실제 글자가 입력되는 상황에서의 동작 순서는 다음과 같다.
        // ① 키보드 'G'를 누른다.
        // ② keydown 이벤트가 발생한다. (input text 창에는 'G'가 입력이 반영되지 않은 상태.)
        // ③ 'G'가 입력된다. (input text 창에 입력한 'G'가 반영된 상태/)
        // ④ keypress 이벤트가 발생한다.
        // ⑤ 'G' 키에서 손을 뗀다.
        // ⑥ keyup 이벤트가 발생한다.
        document.querySelector('#title').addEventListener('keydown', function (e) {
            // preventDefault()는 브라우저 고유의 동작을 중단시켜주는 역할을 합니다.
            // e.preventDefault();
            console.log('down', event.target.value, event);
        });
        document.querySelector('#title').addEventListener('keypress', function (e) {
            // e.preventDefault();
            console.log('press', event.target.value, event);
        });
        document.querySelector('#title').addEventListener('keyup', function (e) {
            // e.preventDefault();
            console.log('up', event.target.value, event);
        });




        document.querySelector('#submitBtn').addEventListener('click', function (e) {
            e.preventDefault();
            alert('클릭요');
        });






        // tr 클릭시 alert
        document.querySelectorAll('#scheduleTbody tr').forEach((item) => {
            item.addEventListener('click', function () {
                alert('상세내용 모달이나 페이지 이동');
            });
        });

        // 실행하기 클릭시 alert
        document.querySelectorAll('.exec').forEach((item) => {
            item.addEventListener('click', function () {
                alert('실행');
            });
        });
    });

</script>
section acticle
div

p

<br>

<div>
    <form action="a.html">
        <input type="text" id="title">
        <input type="submit" id="submitBtn" value="submit">
    </form>
</div>

<br>

<div>
    <table style="width:100%;" border="1">
        <thead>
            <tr>
                <th>번호</th>
                <th>제목</th>
                <th>기능</th>
            </tr>
        </thead>
        <tbody id="scheduleTbody">
            <tr>
                <td>1</td>
                <td>하루한번 스케줄</td>
                <td>
                    <input class="exec" type="button" value="실행하기">
                    <input type="button" value="중단하기">
                    <input type="button" value="삭제하기">
                </td>
            </tr>
            <tr>
                <td>2</td>
                <td>한달한번 스케줄</td>
                <td>
                    <input class="exec" type="button" value="실행하기">
                    <input type="button" value="중단하기">
                    <input type="button" value="삭제하기">
                </td>
            </tr>
        </tbody>
    </table>
</div>
profile
천천히 그리고 단단하게

1개의 댓글

comment-user-thumbnail
2023년 10월 20일

예제랑 설명 너무 잘들었어요!! 구체적인 상황을 들어서 간결하게 말씀해주셔서 이해가 아주 잘됬습니다! 감사합니다!!

답글 달기