์ด๋ฒคํธ๋?
HTML ์ด๋ฒคํธ๋ HTML ์์์์ ๋ฐ์ํ ์ ์๋ ์ํฉ์ผ๋ก, ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ HTML ํ์ด์ง์์ ์ฌ์ฉ๋ ๋ ์๋ฐ ์คํฌ๋ฆฝํธ๋ ์ด๋ฐ ์ด๋ฒคํธ์ ๋ฐ์ํ๋ค.
๋ธ๋ผ์ฐ์ ๋ ์ด๋ฒคํธ๋ฅผ ๊ฐ์งํ ์ ์์ผ๋ฉฐ ์ด๋ฒคํธ ๋ฐ์ ์์๋ ํต์งํด ์ค๋ค.
์ด ๊ณผ์ ์ ํตํด ์ฌ์ฉ์์ ์นํ์ด์ง๋ ์ํธ์์ฉ์ด ๊ฐ๋ฅํ๊ฒ ๋๋ค.
์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ฑ๋ก
HTML ์์์ ์ด๋ฒคํธ ํธ๋ค๋ฌ ์ดํธ๋ฆฌ๋ทฐํธ์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ์ด๋ค. onclick ๊ณผ ๊ฐ์ด on์ผ๋ก ์์ํ๋ ์ด๋ฒคํธ ์ดํธ๋ฆฌ๋ทฐํธ์ ๊ฐ์ผ๋ก ํจ์ ํธ์ถ ๋ฑ์ ์ ๋ฌํ๋ค. HTML๊ณผ Javascript๋ ๊ด์ฌ์ฌ๊ฐ ๋ค๋ฅด๋ฏ๋ก ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์ข์ผ๋ฉฐ, ์ด ๋ฐฉ์์ ๊ถ์ฅํ์ง ์๋๋ค.
</head>
<body>
<h3>์ด๋ฒคํธ ๋ฑ๋ก - ์ธ๋ผ์ธ ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ฐฉ์</h3>
<p><button type="button" onclick="sub1();"> ํ์ธ 1 </button></p>
<p><button type="button" onclick="sub1(); sub2();"> ํ์ธ 2 </button></p>
<script type="text/javascript">
function sub1() {
alert('sub1...');
}
function sub2() {
alert('sub2...');
}
</script>
<script type="text/javascript">
</script>
</body>
</html>
</head>
<body>
<h3>์ด๋ฒคํธ ๋ฑ๋ก - ์ด๋ฒคํธ ํธ๋ค๋ฌ ํ๋กํผํฐ ๋ฐฉ์</h3>
<p> <button type="button" class="btn"> ํ์ธ </button></p>
<script type="text/javascript">
//์๋ฐ์คํฌ๋ฆฝํธ๊ฐ button๋ณด๋ค ์์ ์์ผ๋ฉด ์คํ๋์ง ์๋๋ค.
const btn = document.querySelector('.btn');
btn.onclick = function() {
alert('ํด๋ฆญ 1...');
};
// ์ด๋ฒคํธ ํธ๋ค๋ฌ ํ๋กํผํฐ ๋ฐฉ์์ ํ๋์ ์ด๋ฒคํธ๋ง ๋ฑ๋ก ๊ฐ๋ฅ
// ์ฒซ๋ฒ์งธ ๋ฐ์ธ๋ฉ๋ ์ด๋ฒคํธ๋ ์คํ๋์ง ์๋๋ค.
btn.onclick = function() {
alert('ํด๋ฆญ 2...');
};
</script>
</body>
</html>
addEventListener()
EventTarget ์ธํฐํ์ด์ค์ ๋ฉ์๋๋ก ์๋ ๋ฉํธ์ ์ด๋ฒคํธ๋ฅผ ๋ฑ๋กํ๋ค. ํ๋์ ์์์ ๊ฐ์ ์ ํ์ ์ฌ๋ฌ ์ด๋ฒคํธ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ์ถ๊ฐ ํ ์ ์๋ค.
</head>
<body>
<h3>์ด๋ฒคํธ ๋ฑ๋ก : addEventListener</h3>
<p>
<button type="button" class="btn">ํ์ธ</button>
</p>
<script type="text/javascript">
const btn = document.querySelector('btn');
//๋ ๋ค ์คํ๋๋ค.
btn.addEventListener('click',function(){
alert('ํด๋ฆญ 1');
});
btn.addEventListener('click',()=>{
alert('ํด๋ฆญ 2')
});
</script>
</body>
</html>
</head>
<body>
<h3>๋์ ๊ฐ์ฒด ์ด๋ฒคํธ ๋ฑ๋ก</h3>
<p>
<button type="button" onclick="append()">์ถ๊ฐ</button>
</p>
<hr>
<div class="resultLayout">
<p>
<button type="button" class="btnOk" data-num="1">๋ฒํผ</button>
</p>
</div>
<script type="text/javascript">
var idx = 1;
function append() {
const divEL = document.querySelector('.resultLayout');
let out = divEL.innerHTML;
idx++;
out += `<p><button type="button" class="btnOk" data-num="${idx}">๋ฒํผ</button></p>`;
divEL.innerHTML = out;
//innerHTML๋ ์ฑ๋ฅ์ด ์ข์ง ์์
}
//๋์ ์ผ๋ก ์์ฑ๋ ๊ฐ์ฒด๋ load ์ด๋ฒคํธ ๋จ๊ณ์์ ๊ฒ์ํ์ง ๋ชปํ๋ฏ๋ก ์ด๋ฒคํธ๊ฐ ์ฒ๋ฆฌ ๋์ง ์๋๋ค.
/*
window.addEventListener('load',()=>{
const btnEls = document.querySelectorAll('.btnOk');
for(let el of btnEls){
el.addEventListener('click',e=>{
let num = e.target.getAttribute('data-num');
alert(num);
});
}
});
*/
//๋์ ์ผ๋ก ์ถ๊ฐ๋ ๋ฒํผ์ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด์๋ ์์ ๊ฐ์ฒด์ ์ด๋ฒคํธ๋ฅผ ๋ฑ๋กํ๊ณ
// ํด๋น ๊ฐ์ฒด๋ฅผ ๊ฒ์ํ์ฌ ์ฒ๋ฆฌํ๋ค.
const resultEL = document.querySelector('.resultLayout');
resultEL.addEventListener('click',e=>{
// e.target : ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๊ฐ์ฒด
//matches('์ ํ์') :์์์ ์ ํ์์ ์ผ์นํ๋ฉด true
if(e.target.matches('.btnOk')){
let num = e.target.getAttribute('data-num');
alert(num);
}
});
</script>
</body>
</html>
removeEventListener()
EventTarget ์ธํฐํ์ด์ค์ ๋ฉ์๋๋ก ์๋ ๋ฉํธ์ ๋ฑ๋ก๋ ์ด๋ฒคํธ๋ฅผ ์ ๊ฑฐํ๋ค.
</head>
<body>
<h3>์ด๋ฒคํธ ์ ๊ฑฐ</h3>
<p>์ธ๋ผ์ธ ์ด๋ฒคํธ</p>
<p>
<button type="button" onclick="sub(this);">ํ์ธ</button>
</p>
<script type="text/javascript">
function sub(obj) {
alert('ํ๋ฒ...');
obj.removeAttribute('onclick');
}
</script>
<hr>
<p>์ด๋ฒคํธ ํธ๋ค๋ฌ ํ๋กํผํฐ ๋ฐฉ์</p>
<p>
<button type="button" class="btn2">ํ์ธ</button>
</p>
<script type="text/javascript">
const btn2 = document.querySelector('.btn2');
btn2.onclick=()=>{
alert('๋ค์ ๋๋ฅด์ง ๋ง์ธ์~');
btn2.onclick=null;
}
</script>
<hr>
<p>addEventListener()/removerEventListener()</p>
<p>
<button type="button" class="btn3">ํ์ธ</button>
<button type="button" class="btn4">์ ๊ฑฐ</button>
</p>
<script type="text/javascript">
const btn3 = document.querySelector('.btn3');
const btn4 = document.querySelector('.btn4');
const fn=()=>alert('์๋
...');
btn3.addEventListener('click',fn); // click์ด๋ฒคํธ ๋ฑ๋ก
btn4.addEventListener('click',e=>{ // click ์ด๋ฒคํธ ํด์
btn3.removeEventListener('click',fn,false);
});
</script>
</body>
</html>
</head>
<body>
<h3>์ด๋ฒคํธ๋ฅผ ๋ฐ์ ์ํจ ๊ฐ์ฒด</h3>
<p>
<button type="button" onclick="sub();">ํ์ธ</button>
</p>
<hr>
<script type="text/javascript">
function sub() {
//event : ์ด๋ฒคํธ๋ฅผ ๋ฐ์ ์ํจ ๊ฐ์ฒด
//event๋ deprecated ๋์์ผ๋ฏ๋ก ์ฌ์ฉํ์ง ๋ง๊ฒ์ ๊ถ์ฅ
console.log(event.currentTarget);
console.log(event.target);
}
</script>
<p>
<button type="button" class="btn1" id="b1">์๋ฐ</button>
<button type="button" class="btn1" id="b2">์คํ๋ง</button>
<button type="button" class="btn1" id="b3">์ค๋ผํด</button>
</p>
<div id="resultLayout"></div>
<hr>
<script type="text/javascript">
const btnEls= document.querySelectorAll('.btn1');
const fun = e =>{
//์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํจ ๊ฐ์ฒด(์ด๋ฒคํธ ๋ฑ๋ก ๊ฐ์ฒด)
let obj = e.currentTarget;
//์ด๋ฒคํธ๊ฐ ๋ฐ์๋ ๊ฐ์ฒด์ ํ๊ทธ ์ด๋ฆ
let tag = obj.tagName;
//์ด๋ฒคํธ๊ฐ ๋ฐ์๋ ๊ฐ์ฒด์ id
let i = obj.id;
//์ด๋ฒคํธ๊ฐ ๋ฐ์๋ ๊ฐ์ฒด์ innerText(ํ
์คํธ)
let t = obj.innerText;
let s = '์ด๋ฒคํธ ๋ฐ์๊ฐ์ฒด์ ํ๊ทธ:'+tag+'<br>';
s+='์ด๋ฒคํธ ๋ฐ์ ๊ฐ์ฒด์ id : '+i+'<br>';
s+='์ด๋ฒคํธ ๋ฐ์ ๊ฐ์ฒด์ innerText : '+t;
document.querySelector('#resultLayout').innerText=s;
};
//๋ชจ๋ ๋ฒํผ์ click ์ด๋ฒคํธ ๋ฑ๋ก
btnEls.forEach(el=>el.addEventListener('click',e=>fun(e)));
/* for(let el of btnEls){
el.addEventListener('click',e=>fun(e));
} */
</script>
<p>
<button type="button" class="btn">
<span>ํ์ธ</span>
</button>
</p>
<hr>
<script type="text/javascript">
const btn = document.querySelector('.btn');
//์ด๋ฒคํธ ํธ๋ค๋ฌ์ ์ฒซ๋ฒ์งธ ๋งค๊ฐ๋ณ์ : ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํจ ๊ฐ์ฒด์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ฒด
btn.addEventListener('click', function(e) {
//console.log(e);
console.log(e.target); // ์ด๋ฒคํธ๊ฐ ๋ฐ์๋ ๊ฐ์ฒด, <span>
console.log(e.currentTarget); // ์ด๋ฒคํธ๊ฐ ๋ฑ๋ก๋ ๊ฐ์ฒด, <button>
});
</script>
</body>
</html>
์ด
<style type="text/css">
.box1 {
background: #ccc;
padding: 20px;
display: block;
}
.box2 {
background: #ccc;
padding: 20px;
display: block;
}
.box3 {
background: #ccc;
padding: 20px;
display: block;
}
</style>
</head>
<body>
<h3>์ด๋ฒคํธ ์ทจ์ - preventDefault</h3>
<!--
- a href ์์ฑ : a ํ๊ทธ๋ฅผ ํด๋ฆญํ ๊ฒฝ์ฐ ํด๋น ํ์ด์ง๋ก ์ด๋
- a ํ๊ทธ์ click ์ด๋ฒคํธ๋ ์กด์ฌํ๋ ๊ฒฝ์ฐ : ๋จผ์ click ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๊ณ href ์์ฑ์ผ๋ก ์ด๋
- preventDefault() : ์ด๋ฒคํธ๋ฅผ ์ทจ์ํ ์ ์๋ ๊ฒฝ์ฐ ์ด๋ฒคํธ๋ฅผ ์ทจ์ํ์ง๋ง ์์๋ก์ ์ด๋ฒคํธ๋ ์ ํ๋๋ค.
-->
<div class="box1">
DIV ์์ญ
<p class="box2">
p ์์ญ <a class="box3" href="https://m.naver.com/" target="_blank">A
์์ญ</a>
</p>
</div>
<hr>
<div class="console"></div>
<script type="text/javascript">
const box1 = document.querySelector('.box1');
const box2 = document.querySelector('.box2');
const box3 = document.querySelector('.box3');
const console = document.querySelector('.console');
box1.addEventListener('click', function(e) {
console.innerHTML += 'DIVํด๋ฆญ<br>';
});
box2.addEventListener('click', function(e) {
console.innerHTML += 'P ํด๋ฆญ<br>';
});
box3.addEventListener('click', function(e) {
console.innerHTML += 'A ํด๋ฆญ<br>';
//์ด๋ฒคํธ ๊ธฐ๋ณธ ๋์์ด ์ค์ง๋๋ค.
//href ์์ฑ์ด ๋ฌดํจํ ๋๋ค.
//์์๋ก์ ์ด๋ฒคํธ๋ ์ ํ๋๋ค.
e.preventDefault();
//e.stopPropagation();
//stopPropagation()๋ href๋ ๋ฌดํจํ ๋์ง ์๋๋ค.
//์์๋ก์ ์ด๋ฒคํธ๋ ์ ํ๋์ง ์๋๋ค.
//href๋ ์ด์์๊ณ , p, div ํด๋ฆญ์ ๋ฌดํจํ ๋๋ค.
});
</script>
</body>
</html>
</head>
<body>
<h3>์ด๋ฒคํธ ์ทจ์ - stopPropagation</h3>
<!--
- span ํด๋ฆญ
: ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ฒคํธ๋ ํ์์์ ์์๋ก ์ ํ
: span์ click ํธ๋ค๋ฌ ์คํ - p click ์ด๋ฒคํธ ํธ๋ค๋ฌ ์คํ - div click ์ด๋ฒคํธ ํธ๋ค๋ฌ ์คํ
- stopPropagation()
: ์์๋ก ์ด๋ฒคํธ๊ฐ ์ ํ๋์ง ์๋๋ก ์ค๋จ
-->
<div class="box1">
DIV ์์ญ
<p class="box2">
p ์์ญ <span class="box3">SPAN์์ญ</span>
</p>
</div>
<hr>
<div class="console"></div>
<script type="text/javascript">
const box1 = document.querySelector('.box1');
const box2 = document.querySelector('.box2');
const box3 = document.querySelector('.box3');
const console = document.querySelector('.console');
box1.addEventListener('click', function(e) {
console.innerHTML += 'DIVํด๋ฆญ<br>';
});
box2.addEventListener('click', function(e) {
console.innerHTML += 'P ํด๋ฆญ<br>';
});
box3.addEventListener('click', function(e) {
console.innerHTML += 'SPAN ํด๋ฆญ<br>';
e.stopPropagation();
});
</script>
</body>
</html>
'๐ป > Javascript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
(52) [JavaScript] 8์ผ JavaScript Form (0) | 2024.04.29 |
---|---|
(51) [JavaScript] 7์ผ JavaScript ๊ฐ์ฒด - ์ด๋ฒคํธ2 (1) | 2024.04.28 |
(50) [JavaScript] 6์ผ JavaScript ๊ฐ์ฒด - DOM (1) | 2024.04.28 |
(50) [JavaScript] 6์ผ JavaScript ๊ฐ์ฒด - ํด๋์ค (1) | 2024.04.28 |
(49) [JavaScript] 5์ผ JavaScript ๊ฐ์ฒด - ์์ฑ, ๊ตฌ์กฐ๋ถํด (1) | 2024.04.28 |