Coding 공부/Jquery

[Jquery] 체이닝, on(), val(), click(), mouseenter, mouseleave, hover, scroll(), blur(), keydown()

CBJH 2024. 4. 15.
728x90
반응형

 

1. toggleClass를 hasClass, removeClass, addClass 체이닝으로 구현 예제

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/all.min.css">
    <title>jquery</title>
    <style>
        .chkbox-checkbox-default{
            background: url(./images/sprite__common.png) no-repeat -532px -584px;
            width: 48px;
            height: 48px;
        }
        .chkbox-checkbox-checked{
            background: url(./images/sprite__common.png) no-repeat -532px -532px;
            width: 48px;
            height: 48px;
        }
    </style>   
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
    <script>
        function myFunc(){
            var result = $("#my-chk").hasClass("chkbox-checkbox-default")
            if(result===true){
                $("#my-chk").removeClass("chkbox-checkbox-default")
                .addClass("chkbox-checkbox-checked")    //체이닝 : 접근지정자가 같고 다음에 바로 작업을 수행할 경우 사용함.
            }else{
                $("#my-chk").removeClass("chkbox-checkbox-checked")
                .addClass("chkbox-checkbox-default")
            }
        }
    </script>
</head>
<body>
    <div class ="chkbox-checkbox-default" onclick="myFunc()" id = "my-chk"></div>    
</body>
</html>

 

 

2. HTML button 태그 onclick = "myFunc()" -> Jquery Script에서 click과 콜백함수로 구현

<head>
    ~
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
    <script>
        $(document).ready(function(){
        //ready메서드의 콜백함수는 DOM이 완전히 로드되고 실행된다. (안정성 부여)
            $("#my-btn").click(function(){  //콜백함수 : 메서드 안에 이름 없는 함수
                alert("버튼 클릭!")
            })
            // document.getElementById("my-btn").addEventListener('click',function(){
            //     alert('버튼 클릭!')
            // })
        })
    </script>
</head>
<body>
    <div id = "my-div"></div>
    <button id = "my-btn">클릭</button>
</body>

 

 2.1 onclick과 .click()의 차이점

 

HTML에서 onclick="myFunc()"와 jQuery에서 $("#btnID").click(function(){})를 사용하는 것 사이에는 몇 가지 주요 차이점이 있습니다. 각 방식은 이벤트를 처리하는 방식과 코드의 구조화 측면에서 서로 다른 장단점을 가집니다.

   2.1.1 코드 분리 (Separation of Concerns)

HTML onclick 속성:

  • onclick은 HTML 요소 내부에 직접 JavaScript 함수를 호출합니다. 이는 HTML(구조)과 JavaScript(동작)가 혼합되어 있어, 장기적으로 유지보수가 어려울 수 있습니다.
  • 더 크고 복잡한 웹 페이지에서는 HTML과 JavaScript 코드를 분리하는 것이 더 체계적이고 관리하기 쉽습니다.

jQuery .click() 이벤트 핸들러:

  • jQuery의 .click() 메소드를 사용하면 JavaScript를 완전히 별도의 파일이나 <script> 태그 내부에서 관리할 수 있어 HTML과 JavaScript의 분리가 쉬워집니다.
  • 이 방식은 코드의 가독성과 유지보수성을 향상시키는 모범 사례를 따르는 데 도움이 됩니다.

   2.2.2 이벤트 핸들링 (Event Handling)

HTML onclick 속성:

  • onclick 속성은 해당 HTML 요소에만 직접 이벤트 핸들러를 지정합니다. 이벤트 핸들링은 매우 명시적이지만, 동적으로 추가되는 요소에는 적용되지 않습니다.

jQuery .click() 이벤트 핸들러:

  • jQuery를 사용하면 이벤트 위임을 통해 동적으로 생성된 요소에도 이벤트 핸들러를 쉽게 적용할 수 있습니다. 예를 들어, .on('click', selector, function(){}) 구문을 사용하면 나중에 페이지에 추가되는 요소에도 이벤트를 적용할 수 있습니다.
  • 이벤트 리스너를 중앙에서 관리할 수 있어 다양한 요소에 대한 이벤트를 더 효율적으로 처리할 수 있습니다.

  2.2.3 브라우저 호환성 (Browser Compatibility)

HTML onclick 속성:

  • 대부분의 브라우저에서 일관되게 작동하지만, 복잡한 동작을 구현할 때는 브라우저 간 차이가 문제가 될 수 있습니다.

jQuery .click() 이벤트 핸들러:

  • jQuery는 다양한 브라우저와 버전에서 일관된 동작을 보장하기 위해 내부적으로 많은 호환성 문제를 처리합니다.
  • 특히 구형 브라우저를 지원해야 할 경우, jQuery는 브라우저 간의 일관성을 유지하는 데 도움이 됩니다.

  2.2.4 결론

결론적으로, 코드의 구조화와 유지보수 측면에서 볼 때 jQuery의 .click() 메소드를 사용하는 것이 더 권장됩니다. 그러나 간단한 상황에서는 onclick 속성을 사용하는 것이 더 직관적이고 쉬울 수 있습니다. 프로젝트의 요구 사항과 팀의 코딩 스타일에 따라 적절한 접근 방식을 선택하는 것이 중요합니다.

 

 

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/all.min.css">
    <title>jquery</title>
    <style>
        #my-div{
            width: 100px;
            height: 100px;
            background-color: aqua;
        }
    </style>   
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
    <script>
        $(document).ready(function(){
            $("#my-btn").on('click',function(){
                $("#my-div").css("backgroundColor","red");
            })
        })
    </script>
</head>
<body>
    <div id = "my-div"></div>
    <button id = "my-btn">클릭</button>
</body>

 

2.3 .click(function(){})과 .on('click', function(){})의 차이점

  2.3.1 차이점

  • 단순한 이벤트 핸들링 vs. 복합 이벤트 처리: .click() 메서드는 단순한 사용 사례에 적합하지만, 복수의 이벤트를 다루거나 이벤트 위임이 필요한 경우 .on() 메서드가 더 적합합니다.
  • 동적 요소: 동적으로 생성되는 요소에 대한 이벤트 핸들링은 .click() 메서드로는 구현하기 어렵습니다. .on() 메서드를 사용하면 부모 요소에 이벤트 리스너를 설정하고 특정 자식 요소에서 발생하는 이벤트를 처리할 수 있습니다.

  2.3.2 결론

.on() 메서드는 더 많은 기능과 유연성을 제공하므로 복잡한 어플리케이션과 동적 요소가 포함된 프로젝트에서 더 자주 사용됩니다. 간단한 상황에서는 .click() 메서드를 사용해도 충분하지만, 확장성과 유지보수를 고려한다면 .on() 메서드의 사용을 선호합니다.

 

 

3. val() 함수로 input값 반환받기 예제

<head>
    ~
    <style>
        #my-div1{
            width: 100px;
            height: 50px;
            font-weight: bolder;
            font-size: large;
            background-color: aqua;
        }
        input{
            display: block;
            font-weight: bolder;
            font-size: large;
        }
    </style>   
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
    <script>
        $(document).ready(function(){
            myByt()
        })

        function myByt(){
            $("#my-btn").on('click', function(){
                var val1 = $("#operand-1").val()
                var val2 = $("#operand-2").val()
                result = parseInt(val1) + parseInt(val2)
                $("#my-div1").text(result)
            })
        }
    </script>
</head>
<body>
    <div id = "my-div1"></div>
    <input type="text" id="operand-1">
    <input type="text" id="operand-2">
    <button id = "my-btn">클릭</button>
</body>

 

 

4. on() 함수 안에 그룹 이벤트 등록

  • 두가지 이상의 메서드를 중괄호 안에 콤마로 구분해 넣는다.
<head>
    ~
    <style>
        #my-div1{
            width: 100px;
            height: 100px;
            background-color: aqua;
        }
    </style>   
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
    <script>
        $(document).ready(function(){
            myByt()
        })

        function myByt(){
            //$().on({...}) - on메서드로 그룹 이벤트 등록
            $("#my-btn").on({
                "click":function(){
                    $("#my-div1").css("backgroundColor","red")
                },
                "dblclick":function(){
                    $("#my-div1").css("backgroundColor","green")
                }                
            })
        }
    </script>
</head>
<body>
    <div id = "my-div1"></div>
    <button id = "my-btn">클릭</button>
</body>
  • 버튼을 한 번 클릭하면 빨간색으로 변경되고, 더블 클릭하면 초록색으로 변경된다.
  • doubleClick일것 같지만 dblclick이다.

 

4.1 mouseenter, mouseleave 이벤트

  • hover와 비슷한 역할을 한다.
<head>
    ~
    <style>
        #my-div1{
            width: 100px;
            height: 100px;
            background-color: aqua;
        }
    </style>   
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
    <script>
        $(document).ready(function(){
            myByt()
        })

        function myByt(){
            $("#my-btn").on({
                "mouseenter":function(){    //hover와 비슷함
                    $("#my-div1").css("backgroundColor","red")
                },
                "mouseleave":function(){
                    $("#my-div1").css("backgroundColor","green")
                }                
            })
        }
    </script>
</head>
<body>
    <div id = "my-div1"></div>
    <button id = "my-btn">클릭</button>
</body>

 

<head>
    ~
    <style>
        #my-div1{
            width: 100px;
            height: 100px;
            background-color: aqua;
        }
    </style>   
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
    <script>
        $(document).ready(function(){
            myByt()
        })

        function myByt(){
            $("#my-btn").hover(	//on과 달리 중괄호 안쓰고 소괄호 안에 function을 두개 적는다
                function(){   //mouseenter시에 실행될 함수
                    $("#my-div1").css("backgroundColor","red")
                },
                function(){   ////mouseleave시에 실행될 함수
                    $("#my-div1").css("backgroundColor","green")
                }                
            )
        }
    </script>
</head>
<body>
    <div id = "my-div1"></div>
    <button id = "my-btn">클릭</button>
</body>

 

5. scroll 함수로 scrollTop(), scroolLeft() 값 반환받기 예제

<head>
    ~
    <style>
        body{
            width: 5000px;
            height: 5000px;
            background-color: aqua;
        }
        #pos-div{
            position: fixed;
            width: 200px;
            height: 200px;
            background-color: wheat;
            padding:  10px;
            box-sizing: border-box;
            border-radius: 10px;
        }
        #pos-div>span{
            display: block;
            background-color: antiquewhite;
            margin-bottom: 10px;
            font-weight: bold;
        }
        #pos-div>span>b{
            color: red;
        }

    </style>   
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
    <script>
        $(document).ready(function(){
            $(window).on('scroll',function(){
                var curTop=$(this).scrollTop()
                var curLeft=$(this).scrollLeft()
                $("#pos-vertical>b").text(curTop)
                $("#pos-horizontal>b").text(curLeft)
            }) 
        })
    </script>
</head>
<body>
    <div id ="pos-div">
        <span id="pos-vertical">scrollTop:<b>0</b>px</span>
        <span id="pos-horizontal">scrollLeft:<b>0</b>px</span>
    </div>
</body>

 

 

6. blur 함수 예제

<head>
    ~
    <style>
        #my-input{
            background-color: antiquewhite;
        }
    </style>   
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
    <script>
        $(document).ready(function(){
            $("#my-input").on({
                "focus":function(){
                    console.log('focus')    //입력창을 마우스로 클릭 했을 때, input창이 활성화 되어 있을 때
                },
                "blur":function(){
                    console.log('blur')     //입력창 밖을 마우스로 클릭 했을 때, input창이 활성화 되어 있지 않을 때
                }
            })
        })        
    </script>
</head>
<body>
    <input type="text" id="my-input">
</body>
  • 보통 blur함수를 사용해서 입력한 텍스트의 유효성 검사 같은 것들을 한다.
  • 구글에 blur함수 검색하면 다양한 예제가 나온다.

 

7. keydown 함수로 키보드 값 반환받기 예제

<head>
    ~
    <style>
        #my-input{
            background-color: antiquewhite;
        }
    </style>   
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
    <script>
        $(document).ready(function(){
            $(document).on('keydown',function(e){//이벤트 객체정보
                console.log(e.keyCode) //아스키 코드 값 또는 정해진 값이 나온다.
                switch(e.keyCode){
                    case 37://arrow left
                    $("#my-input").val('LEFT')
                    break
                    case 38://arrow up
                    $("#my-input").val('UP')
                    break
                    case 39://arrow right
                    $("#my-input").val('RIGHT')
                    break
                    case 40://arrow down
                    $("#my-input").val('DOWN')
                    break
                }
            })
        })        
    </script>
</head>
<body>
    <input type="text" id="my-input">
</body>
  • keydown 콜백함수의 매개변수가 입력한 키보드 값을 읽어와 반환한다.
  • e.keyCode는 아스키 코드 또는 정해진 값을 반환한다.
  • e.key는 키값을 반환한다.

댓글