본문 바로가기
JQuery

230217 JQuery 각종 이벤트 함수와 on()

제이쿼리 이벤트 함수


js에서 사용하던 이벤트함수에서 on이 빠진다.

$("선택자").click(function() {실행시킬구문})

 


on()

이벤트 위임
부모에다 이벤트를 걸면 자식이 전달받는다.

$("선택자").on("이벤트","선택자",function(){})
->$("선택자")에도 걸고, 자식에도 거는 형식임.

innerHTML로 태그를 그릴 때가 있다. 그럴 때 사용.

또한, 반복문을 돌릴 필요가 없다.

on함수는 이벤트체이닝에도 사용 가능.

 

 

jquery08.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- jquery -->
    <script src="js/jquery-3.6.3.min.js"></script>
</head>
<body>
    
    <button id="btn">이벤트등록</button>

    <input type="text" id="tag"/>

    <select id="sel">
        <option>1</option>
        <option>2</option>
    </select>

    <div style="background-color: aqua;" id="mos">마우스이벤트</div>

    <script>
        //클릭
        $("#btn").click(()=>{
            console.log("click");
        })

        //키관련이벤트
        $("#tag").keyup(function() {
            console.log("key~");
        })

        //체인지
        $("#sel").change(function(){
            console.log("chan");
        })

        //마우스관련 이벤트
        $("#mos").mouseenter(()=>{console.log("mouse enter")})
        $("#mos").mouseleave(()=>{console.log("mouse leave")})

    </script>
    <hr/>
    <h3>이벤트 위임방식 on()</h3>

    <div id="box"></div>

    <script>
        setTimeout(() => {
            var str="";
            str+="<a href='#'>태그1</a>"
            str+="<a href='#'>태그2</a>"
            str+="<a href='#'>태그3</a>"
            $("#box").html(str);
        }, 2000); //2초 뒤에 태그생성

        
        // $("a[href='#']").click(()=>{
        //     console.log("a링크 실행");
        // });
        //이 이벤트가 실행될 때 a태그는 없다. a태그 생성된 뒤 이벤트 적용 안된다.
        //따라서, 부모에게 이벤트를 걸고 자식이 받게 해야 한다.

        //(이벤트종류, 위임시킬선택자, 핸들러)
        $("#box").on("click","a[href='#']",()=>{
            event.preventDefault();//고유이벤트중지
            console.log("a링크 실행");
        });


    </script>


</body>
</html>

setTimeout으로 가정, 2초 뒤에 a태그가 생성된다.

script의 a태그의 이벤트를 걸어주는 함수가 실행될 때 a태그는 존재하지 않기 때문에 a태그가 그려진 후에 이벤트가 걸리지 않는다. 

따라서, 부모에게 이벤트를 걸고 자식이 받게 하는 것.