JQuery문을 이용해서 이벤트를 활성화 하는 법을 알아보자.
bind() : 현재 문서에 존재하는 객체에 event 속성을 부여
unbind() : bind로 생성된 이벤트 제거
on() : 1.7 버전 이후로 쓰이고 bind와 기능은 같다. bind보단 on을 사용하길 권장한다.
off() : on으로 생성된 이벤트 제거
bind('이벤트명', function)으로 사용하고
on은 on('이벤트명':function, '이벤트명':function, '이벤트명':function, '이벤트명':function, .....) 과 같이 사용한다.
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <style> #test2, #test3 { width:300px; height:300px; background:orangered; } </style> </head> <body> <h1>이벤트</h1> <h3>이벤트 관련 속성</h3> <button onclick="test1(event)">실행 확인</button> <script type="text/javascript"> function test1(event) { console.log(event); } </script> <hr> <h3>이벤트 연결 종류</h3> <h4>bind() : 현재 존재하는 문서 객체만 이벤트 연결<br> unbind() : bind()로 연결된 이벤트 제거</h4> <h1 id="test1">마우스를 올려보세요</h1> <script> $(function(){ $("#test1").bind('mouseenter', function(){ $(this).css({"background":"black", "color":"white"}); }).bind('mouseleave', function(){ $(this).css({"background":"white", "color":"black"}); }); $("#test1").bind('click', function(){ $(this).unbind('mouseenter').unbind('mouseleave').css({"background":"white", "color":"black"}); }); }); </script> <h4>on() : bind()대신에 on으로 대체됨<br> off() : on()으로 연결된 이벤트 제거</h4> <div id="test2">기본상태</div> <script> $(function(){ $("#test2").on({'mouseenter':function(){ $(this).css("background", "yellowgreen").text("마우스 올라감"); }, 'mouseleave':function(){ $(this).css("background", "yellow").text("마우스 내려감"); }, 'click':function(){ $(this).off('mouseenter').off('mouseleave').css("background", "orangered").text("기본값"); }}); }); </script> <br> <div id="test3">기본상태</div> <script type="text/javascript"> $(function() { $("#test3").on("click", {name : "김가루"}, function(event) { alert(event.data.name + "님 환영합니다!"); }); }); </script> <br> <div id="wrap"> <h2>Header</h2> </div> <script> $(function(){ $(document).on('click', 'h2', function(){ var length = $("h2").length; var targetHTML = $(this).html(); console.log(length); console.log(targetHTML); $("#wrap").append("<h2>" + targetHTML + " - " + length + "</h2>"); }); }); </script> <hr> <h3>one() 메소드</h3> <p>이벤트를 한 번만 연결할 때 사용한다.</p> <h1 id="test4">클릭하세요</h1> <script type="text/javascript"> $(function() { $("#test4").one("click", function() { alert("이벤트 발생!!"); }); }); </script> </body> </html>
jq에서 이벤트를 지정하는 다른 방법은
$(불러올 객체).이벤트명(function)과 같이 쓴다.
이와 같이 다양한 이벤트 지정 방법이 존재하므로 마음에 드는 방법을 사용하면 된다.
mouseover, mouseenter, hover, keydown, keypress, keyup, click, change, focus 등 다양한 이벤트 키워드들이 있고
이 중 hover이나 focus 같이 사용법이 특이한 경우도 있으므로 예에서 잘 확인해보자
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <style type="text/css"> .inner{ width: 100%; height: 100%; background: red; } .outer{ width: 200px; height: 200px; background: orange; padding: 50px; } .reverse{ background: black; color: white; } </style> </head> <body> <h1>이벤트 연결 메소드</h1> <h3>mouseover와 mouseenter</h3> <div class="outer"> <div class="inner"></div> </div> <script type="text/javascript"> // mouseover는 요소에 마우스 포인터가 진입하면 발생 // (직접 이벤트를 걸지 않은 자식요소에 포인터가 와도 발생함) // mouseenter는 오로지 자신에게 마우스 포인터가 와야만 발생함 $(function() { $(".outer").mouseover(function() { console.log("OVER!"); }); $(".outer").mouseenter(function() { console.log("ENTER") }); }); </script> <h3>hover() 메소드</h3> <p>mouseenter와 mouseleave를 동시에 사용하는 효과이다.</p> <h1 id="test1">hover테스트</h1> <script type="text/javascript"> $(function() { $("#test1").hover( function() { // 첫번째는 mouseenter $(this).addClass("reverse"); }, function() { // 두번째는 mouseleave $(this).removeClass("reverse"); } ); }); </script> <h3>키보드이벤트</h3> <p>keydown : 키보드가 눌려질 때<br> keypress : 글자가 입력될 때<br> keyup : 키보드가 떼어질 때</p> <h4>동적으로 글자 수 세기</h4> <div> <h1 id="counter">150</h1> <textarea rows="5" cols="70"></textarea> </div> <script type="text/javascript"> $(function() { $("textarea").keydown(function() { var inputLength = $(this).val().length; var remain = 150 - inputLength; $("#counter").html(remain); if (remain >= 0) { $("#counter").css("color", "black"); }else { $("#counter").css("color", "red"); } }); }); </script> </body> </html>
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <style> .trg { width:100px; height:100px; background:orangered; text-align:center; vertical-align:middle; cursor:pointer; } .increment { background:black; width:100px; height:25px; color:white; text-align:center; margin-top:20px; cursor:pointer; } </style> </head> <body> <h1>입력 양식 이벤트</h1> <div id="wrap"> <h1 align="center">회원 가입</h1> <form> <table align="center"> <tr> <td><label>이름</label></td> <td><input type="text" name="name" id="name"></td> <td><label id="nameresult"></label></td> </tr> <tr> <td><label>아이디</label></td> <td><input type="text" name="userid" id="userid"></td> <td><input type="button" value="중복확인"></td> </tr> <tr> <td><label>비밀번호</label></td> <td><input type="password" name="pwd1" id="pwd1"></td> <td></td> </tr> <tr> <td><label>비밀번호 확인</label></td> <td><input type="password" name="pwd2" id="pwd2"></td> <td><label id="pwdresult"></label></td> </tr> <tr> <td><label>이메일</label></td> <td><input type="email" name="email" id="email"></td> <td></td> </tr> <tr> <td></td> <td><input type="submit"> <input type="reset"></td> <td></td> </tr> </table> </form> </div> <script type="text/javascript"> $("#name").change(function(){ var regExp = /[가-힣]/; if(!regExp.test($(this).val())){ $("#nameresult").html("한글로 입력하세요").css("color", "red"); $(this).focus().css("background","red"); }else{ $("#nameresult").html("정상입력").css("color","green"); } }); $("#pwd2").change(function(){ if($("#pwd1").val() != $(this).val()){ $("#pwdresult").html("비밀번호가 일치하지 않습니다").css("color","red"); $("#pwd2").val(''); $(this).select(); }else{ $("#pwdresult").html("비밀번호 일치").css("color","green"); } }); $("#name").focus(function(){ console.log('focus이벤트 가동'); }).focusin(function(){ console.log('focusin이벤트 가동'); }).focusout(function(){ console.log('focusout이벤트 가동'); }).blur(function(){ console.log('blur이벤트 가동'); }).change(function(){ console.log('change이벤트 가동'); }).select(function(){ console.log('select이벤트 가동'); }) $("form").submit(function(event){ alert("submit이벤트 동작"); event.preventDefault(); }); </script> <div id="result"></div> <script> $(function(){ $("input[type=submit]").click(function(){ $("#result").html("이름 : " + $("#name").val()); }); }); </script> <hr> <h3>trigger()메소드</h3> <div class="trg" id="trg"> click Num : <span>0</span>; </div> <div class="increment" id="increment">click me!</div> <script type="text/javascript"> var ctn = 0; $(function() { $("#trg").on("click", function() { ctn++; $("span").text(ctn); }); }); $("#increment").click(function() { $("#trg").trigger("click"); }); </script> </body> </html>