[Js] ๋ง์ฐ์ค | jQuery ์ด๋ฒคํธ | on ApI ์ฌ์ฉ๋ฒ
- -
๋ชจ๋ ํฌ์คํ ์ ์ธํ๋ฐ [์ํ์ฝ๋ฉ] ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์์ ๋ด์ฉ์ ๋ด๊ณ ์์ผ๋ฉฐ
์ถ์ฒ๋ ์๋์ ์ฃผ์๋ก "egoing Lee"๋์ ์๋ฃ์ ๋๋ค.
์์ ์ ์ธ ์๋๊ฐ ์๋ ๊ณต๋ถํ ๊ฒ์ ์ ๋ฆฌํด๋๋ ๋ชฉ์ ์ผ๋ก ํฌ์คํ ํ ๊ฒ์ ๋๋ค.
๋ง์ฐ์ค
์ด๋ฒคํธ ํ์
์น๋ธ๋ผ์ฐ์ ๋ ๋ง์ฐ์ค์ ๊ด๋ จํด์ ๋ค์ํ ์ด๋ฒคํธ ํ์ ์ ์ง์ํ๋ค.
- click
ํด๋ฆญํ์ ๋ ๋ฐ์ํ๋ ์ด๋ฒคํธ. - dblclick
๋๋ธํด๋ฆญ์ ํ์ ๋ ๋ฐ์ํ๋ ์ด๋ฒคํธ - mousedown
๋ง์ฐ์ค๋ฅผ ๋๋ฅผ ๋ ๋ฐ์ - mouseup
๋ง์ฐ์ค๋ฒํผ์ ๋ ๋ ๋ฐ์ - mousemove
๋ง์ฐ์ค๋ฅผ ์์ง์ผ ๋ - mouseover
๋ง์ฐ์ค๊ฐ ์๋ฆฌ๋จผํธ์ ์ง์ ํ ๋ ๋ฐ์ - mouseout
๋ง์ฐ์ค๊ฐ ์๋ฆฌ๋จผํธ์์ ๋น ์ ธ๋๊ฐ ๋ ๋ฐ์ - contextmenu
์ปจํ ์คํธ ๋ฉ๋ด๊ฐ ์คํ๋ ๋ ๋ฐ์
ํค๋ณด๋ ์กฐํฉ
๋ง์ฐ์ค ์ด๋ฒคํธ๊ฐ ํธ์ถ๋ ๋ ํน์ํค(alt, ctrl, shift)๊ฐ ๋๋ ค์ง ์ํ๋ฅผ ๊ฐ์งํด์ผ ํ๋ค๋ฉด ์ด๋ฒคํธ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ๋ค. ์ด ๋ ์ฌ์ฉํ๋ ํ๋กํผํฐ๋ ์๋์ ๊ฐ๋ค.
- event.shiftKey
- event.altKey
- event.ctrlKey
๋ง์ฐ์ค ํฌ์ธํฐ ์์น
๋ง์ฐ์ค ์ด๋ฒคํธ์ ๊ด๋ จํ ์์ ์์๋ ๋ง์ฐ์ค ํฌ์ธํฐ์ ์์น๋ฅผ ์์๋ด๋ ๊ฒ์ด ์ค์ํ ๋๊ฐ ์๋๋ฐ ์ด๋ฐ ๊ฒฝ์ฐ ์ด๋ฒคํธ ๊ฐ์ฒด์ clientX์ clientY๋ฅผ ์ฌ์ฉํ๋ค
.
์์
์๋ ์์ ๋ ์ง๊ธ๊น์ง ์ดํด๋ณธ ์ด๋ฒคํธ์ ๊ด๋ จ๋ ๊ธฐ๋ฅ์ ์ข ํฉ์ ์ผ๋ก ๋ณด์ฌ์ค๋ค. (์คํ)
<html>
<head>
<style>
body{
background-color: black;
color:white;
}
#target{
width:200px;
height:200px;
background-color: green;
margin:10px;
}
table{
border-collapse: collapse;
margin:10px;
float: left;
width:200px;
}
td, th{
padding:10px;
border:1px solid gray;
}
</style>
</head>
<body>
<div id="target">
</div>
<table>
<tr>
<th>event type</th>
<th>info</th>
</tr>
<tr>
<td>click</td>
<td id="elmclick"></td>
</tr>
<tr>
<td>dblclick</td>
<td id="elmdblclick"></td>
</tr>
<tr>
<td>mousedown</td>
<td id="elmmousedown"></td>
</tr>
<tr>
<td>mouseup</td>
<td id="elmmouseup"></td>
</tr>
<tr>
<td>mousemove</td>
<td id="elmmousemove"></td>
</tr>
<tr>
<td>mouseover</td>
<td id="elmmouseover"></td>
</tr>
<tr>
<td>mouseout</td>
<td id="elmmouseout"></td>
</tr>
<tr>
<td>contextmenu</td>
<td id="elmcontextmenu"></td>
</tr>
</table>
<table>
<tr>
<th>key</th>
<th>info</th>
</tr>
<tr>
<td>event.altKey</td>
<td id="elmaltkey"></td>
</tr>
<tr>
<td>event.ctrlKey</td>
<td id="elmctrlkey"></td>
</tr>
<tr>
<td>event.shiftKey</td>
<td id="elmshiftKey"></td>
</tr>
</table>
<table>
<tr>
<th>position</th>
<th>info</th>
</tr>
<tr>
<td>event.clientX</td>
<td id="elemclientx"></td>
</tr>
<tr>
<td>event.clientY</td>
<td id="elemclienty"></td>
</tr>
</table>
<script>
var t = document.getElementById('target');
function handler(event){
var info = document.getElementById('elm'+event.type);
var time = new Date();
var timestr = time.getMilliseconds();
info.innerHTML = (timestr);
if(event.altKey){
document.getElementById('elmaltkey').innerHTML = timestr;
}
if(event.ctrlKey){
document.getElementById('elmctrlkey').innerHTML = timestr;
}
if(event.shiftKey){
document.getElementById('elmshiftKey').innerHTML = timestr;
}
document.getElementById('elemclientx').innerHTML = event.clientX;
document.getElementById('elemclienty').innerHTML = event.clientY;
}
t.addEventListener('click', handler);
t.addEventListener('dblclick', handler);
t.addEventListener('mousedown', handler);
t.addEventListener('mouseup', handler);
t.addEventListener('mousemove', handler);
t.addEventListener('mouseover', handler);
t.addEventListener('mouseout', handler);
t.addEventListener('contextmenu', handler);
</script>
</body>
</html>
์คํ ๊ฒฐ๊ณผ
jQuery ์ด๋ฒคํธ
jQuery๋ ์ด๋ฒคํธ์ ๊ด๋ จํด์ ํธ๋ฆฌํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ์๋ ์์ ๋ ์ง์ ์ด๋ฒคํธ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ ๊ฒ๊ณผ jQuery๋ฅผ ์ด์ฉํ๋ ๊ฒ์ ์ฐจ์ด์ ์ ๋ณด์ฌ์ค๋ค. (์คํ)
<input type="button" id="pure" value="pure" />
<input type="button" id="jquery" value="jQuery" />
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script>
// ์์ํ๊ฒ ๊ตฌํํ์ ๋
var target = document.getElementById('pure');
if(target.addEventListener){
target.addEventListener('click', function(event){
alert('pure');
});
} else {
target.attachEvent('onclick', function(event){
alert('pure');
});
}
// jQuery๋ฅผ ์ฌ์ฉํ์ ๋
$('#jquery').on('click', function(event){
alert('jQuery');
})
</script>
์ฝ๋ ๋ถ๋์ ํฐ์ฐจ์ด๊ฐ ์๋ค. jQuery๋ ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ง์ ์์์ ์ฒ๋ฆฌํด์ฃผ๊ณ , ์ด๋ฒคํธ๋ฅผ ๋ณด๋ค ์ ์ ์ฝ๋๋ก ๊ตฌํํ ์ ์๋๋ก ํด์ค๋ค.
์ด๋ฐ ์ด์ ๋๋ฌธ์ jQuery์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
on API ์ฌ์ฉ๋ฒ
๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ
on์ jQuery์์ ๊ฐ์ฅ ์ค์ํ ์ด๋ฒคํธ API์ด๋ค. on API๋ฅผ ํตํด์ jQuery์์ ์ด๋ฒคํธ๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์.
on์ ๊ธฐ๋ณธ์ ์ธ ๋ฌธ๋ฒ์ ์๋์ ๊ฐ๋ค.
.on( events [, selector ] [, data ], handler(eventObject) )
- event : ๋ฑ๋กํ๊ณ ์ ํ๋ ์ด๋ฒคํธ ํ์ ์ ์ง์ ํ๋ค. (์: "click")
- selector : ์ด๋ฒคํธ๊ฐ ์ค์น๋ ์๋ฆฌ๋จผํธ์ ํ์ ์๋ฆฌ๋จผํธ๋ฅผ ์ด๋ฒคํธ ๋์์ผ๋ก ํํฐ๋งํจ
- data : ์ด๋ฒคํธ๊ฐ ์คํ๋ ๋ ํธ๋ค๋ฌ๋ก ์ ๋ฌ๋ ๋ฐ์ดํฐ๋ฅผ ์ค์ ํจ
- handler : ์ด๋ฒคํธ ํธ๋ค๋ฌ ํจ์
[]๋ก ๊ดํธ๊ฐ ์ณ์ ธ์๋ ๊ฒ๋ค์ ์๋ต์ด ๊ฐ๋ฅํ๋ค.
selector(:์๋ต ๊ฐ๋ฅ)
selector ํ๋ผ๋ฏธํฐ๋ ์ด๋ฒคํธ ๋์์ ํํฐ๋งํ๋ค. ์๋ ์์ ๋ฅผ ๋ณด์.
<ul>
<li><a href="#">HTML</a></li>
<li><a href="#">CSS</a></li>
<li><a href="#">JavaScript</a></li>
</ul>
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script>
$('ul').on('click','a, li', function(event){
console.log(this.tagName);
})
</script>
ul์๋ฆฌ๋จผํธ์ ์ด๋ฒคํธ๋ฅผ ๋ฌ์์ง๋ง, a, li ํด๋ฆญ ์ click์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์ค์น ํ ๊ฒ์ฒ๋ผ ๋์ํ๋ค.
์คํ๊ฒฐ๊ณผ
A
LI
์์ ์์ ๋ ul ์๋ฆฌ๋จผํธ์ ํ์ ์๋ฆฌ๋จผํธ ์ค์ a, li ์๋ฆฌ๋จผํธ๋ค์ ๋ํด์๋ง ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ค. ์ฃผ์ ํ ๊ฒ์ ul ์๋ฆฌ๋จผํธ๋ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ง ์๋๋ค๋ ์ ์ด๋ค.
์ด๊ฒ์ jQuery์์ ์ด๋ฒคํธ ๋ฒ๋ธ๋ง์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ด๊ธฐ๋ ํ๋ค.
์ ๋ ํฐ๋ ์ค์ํ ํ๋์ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์๋๋ฐ, ๊ทธ๊ฒ์ด ๋ฐ๋ก ๋ฆ์ ์ฐ๊ฒฐ "late binding"์ด๋ผ๋ ๊ธฐ๋ฅ์ด๋ค.
late binding
jQuery๋ ์กด์ฌํ์ง ์๋ ์๋ฆฌ๋จผํธ์๋ ์ด๋ฒคํธ๋ฅผ ๋ฑ๋กํ ์ ์๋ ๋๋ผ์ด ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ์๋ ์ฝ๋๋ฅผ ๋ณด์.
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script>
$('ul').on('click','a, li', function(event){
console.log(this.tagName);
})
</script>
<ul>
<li><a href="#">HTML</a></li>
<li><a href="#">CSS</a></li>
<li><a href="#">JavaScript</a></li>
</ul>
์์ ์ฝ๋๋ ์คํ๋์ง ์๋๋ค. ul ์๋ฆฌ๋จผํธ๊ฐ ์กด์ฌํ์ง ์์ ๋ ์ด๋ฒคํธ ์ค์น๋ฅผ ์๋ํ๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์กด์ฌํ์ง ์๋ ์๋ฆฌ๋จผํธ์ ์ด๋ฒคํธ๋ฅผ ๋ฌ ์ ์๋ค๋ ๊ฒ์ ์ด๋ฏธ ๋ฐฐ์ด ๋ฐ๊ฐ ์๋ค. ๊ทธ๋ฐ๋ฐ jQuery๋ ์กด์ฌํ์ง ์๋ ์๋ฆฌ๋จผํธ์๊ฒ๋ ์ด๋ฒคํธ๋ฅผ ์ค์นํ ์ ์๋ค.
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script>
$('body').on('click','a, li', function(event){
console.log(this.tagName);
})
</script>
<ul>
<li><a href="#">HTML</a></li>
<li><a href="#">CSS</a></li>
<li><a href="#">JavaScript</a></li>
</ul>
์ฆ, ์์ง ์์ง ๋ชปํ๋ ulํ๊ทธ๊ฐ ์๋, ์กด์ฌ ํ๊ณ ์๋ ๊ฒ์ด ํ์ธ ๋, body ํ๊ทธ๋ฅผ ์คํ ์ํค๋ฏ๋ก์จ ๋์ค์ ์ถ๊ฐ๋๋ ์๋ฆฌ๋จผํธ์ ๋ํ ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด๋ค.
(์์ ์๋ live๋ก ์ฌ์ฉํ์์ผ๋ ์ด์ ์๋จ)
๋ค์ค ๋ฐ์ธ๋ฉ
ํ๋์ ์๋ฆฌ๋จผํธ์ ์ฌ๋ฌ๊ฐ์ ์ด๋ฒคํธ ํ์ ์ ๋์์ ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์. (์คํ)
<input type="text" id="target" />
<p id="status"></p>
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script>
$('#target').on('focus blur', function(e){
$('#status').html(e.type);
})
</script>
focus์ blur์ฌ์ด์ ๊ณต๋ฐฑ์ ํตํด ๋๊ฐ์ง์ ์ด๋ฒคํธ ํ์ ์ ๋์์ ๋ฑ๋กํ์๋ค.
ํ๋ฒ์ ์ฌ๋ฌ๊ฐ์ ์ด๋ฒคํธ ํ์ ์ ์ ํํ๋ค. ๋ง์ฝ ์ด๋ฒคํธ์ ๋ฐ๋ผ์ ๋ค๋ฅธ ํธ๋ค๋ฌ๋ฅผ ์คํํ๊ณ ์ถ๋ค๋ฉด ์๋์ ๊ฐ์ด ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๋ค.
<input type="text" id="target" />
<p id="status"></p>
<script src="https://code.jquery.com/jquery-2.2.4.min.js" integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" crossorigin="anonymous"></script>
<script>
$('#target').on({
'focus' : function(e){
},
'blur' : function(e){
}
})
</script>
์ด๋ฒคํธ ์ ๊ฑฐ
์ด๋ฒคํธ๋ฅผ ์ ๊ฑฐํ ๋๋ off๋ฅผ ์ฌ์ฉํ๋ค.
<input type="text" id="target"></textarea>
<input id="remove" type="button" value="remove" />
<p id="status"></p>
<script src="https://code.jquery.com/jquery-2.2.4.min.js" integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" crossorigin="anonymous"></script>
<script>
var handler = function(e){
$('#status').text(e.type+Math.random());
};
$('#target').on('focus blur', handler)
$('#remove').on('click' , function(e){
$('#target').off('focus blur', handler);
console.log(32);
})
</script>
<input type="text" id="target"></textarea>
<input id="remove" type="button" value="remove" />
<p id="status"></p>
<script src="https://code.jquery.com/jquery-2.2.4.min.js" integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" crossorigin="anonymous"></script>
<script>
var handler = function(e){
$('#status').text(e.type+Math.random());
};
$('#target').on('focus blur', handler)
$('#target').on('focus' , function(e){
alert('test');
});
$('#remove').on('click', function(e){
$('#target').off('focus blur');
})
</script>
์ฆ, remove๋ฅผ ํด๋ฆญํด์ ์ด๋ฒคํธ๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ์ด๋ค.
'Languages > Java Script' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Js] JSON | Ajax์ JSON (0) | 2021.02.10 |
---|---|
[Js]๋คํธ์ํฌ ํต์ | Ajax (0) | 2021.02.10 |
๐๐ป[Js] ๊ธฐ๋ณธ๋์์ ์ทจ์ | ํผ | ๋ฌธ์๋ก๋ฉ (0) | 2021.02.10 |
๐๐ป[Js] addEventListener() | ์ด๋ฒคํธ ์ ํ | ๋ฒ๋ธ๋ง๊ณผ ์บก์ฒ๋ง (0) | 2021.02.10 |
์์คํ ๊ณต๊ฐ ๊ฐ์ฌํฉ๋๋ค