๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป/Javascript

(51) [JavaScript] 7์ผ JavaScript ๊ฐ์ฒด - ์ด๋ฒคํŠธ2

by ๋”ฐ๊ถˆ 2024. 4. 28.

 

 

 


</head>
<body>

	<h3>Bubbling ๊ณผ Capturing</h3>

<!-- 
	Bubbling : ํ•˜์œ„ ์š”์†Œ์—์„œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ•˜์œ„์—์„œ ์ƒ์œ„๋กœ ์ด๋ฒคํŠธ๊ฐ€ ์ „ํŒŒ(๊ธฐ๋ณธ)
	Capturing : ํ•˜์œ„ ์š”์†Œ์—์„œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ƒ์œ„์—์„œ ํ•˜์œ„๋กœ ์ด๋ฒคํŠธ๊ฐ€ ์ „ํŒŒ 
 -->



	<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');
	
		//๊ธฐ๋ณธ :Bubbling 
		//Span ์„ ํด๋ฆญํ•˜๋ฉด : SPANํด๋ฆญ > Pํด๋ฆญ < DIV ํด๋ฆญ ์ˆœ์œผ๋กœ ์‹คํ–‰ 
		
		/*
		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>';		
		});
		*/
		
		
		//Capturing
		//Span ์„ ํด๋ฆญํ•˜๋ฉด "DIVํด๋ฆญ > Pํด๋ฆญ > SPAN ํด๋ฆญ" 
		
		box1.addEventListener('click', function(e) {
			console.innerHTML += 'DIVํด๋ฆญ<br>';
		},true);

		box2.addEventListener('click', function(e) {
			console.innerHTML += 'P ํด๋ฆญ<br>';
		},true);

		box3.addEventListener('click', function(e) {
			console.innerHTML += 'SPAN ํด๋ฆญ <br>';		
		},true);
		
		
	</script>


</body>
</html>

 

 

 

</head>
<body>

	<h3>ํ‚ค๋ณด๋“œ ๊ด€๋ จ ์ด๋ฒคํŠธ</h3>

	<p>
		<input type="text" id="inputs">
	</p>
	<hr>

	<div id="Layout"></div>
	<hr>

	<!-- 
		- ASC II ํ‚ค : a~z, 0~9, ์—”ํ„ฐ ๋“ฑ 
		๋ฐœ์ƒ๋˜๋Š” ์ด๋ฒคํŠธ : keydown -> keypress -> keyup 
		- ํŠน์ˆ˜ํ‚ค : SHift, Alt, ctrl , F1~F12 ๋“ฑ
		๋ฐœ์ƒ๋˜๋Š” ์ด๋ฒคํŠธ : keydown - > keyup
		- keypress : ์‹ค์ œ ๋ˆŒ๋Ÿฌ์ง„ ํ‚ค์ฝ”๋“œ๋กœ ๋ฐ˜ํ™˜(์‚ฌ์šฉํ•˜์ง€ ๋ง๊ฒƒ์„ ๊ถŒ์žฅ) 
		key ์†์„ฑ์œผ๋กœ ์‹ค์ œ ๋ˆŒ๋Ÿฌ์ง„ ํ‚ค๋ฅผ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.  
	 -->

	<script type="text/javascript">
		const inputEL = document.querySelector('#inputs');
		const divEL = document.querySelector('#Layout');
		
		//keydown ์ด๋ฒคํŠธ ๋“ฑ๋ก ๋ฐ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ 
		inputEL.onkeydown=e=>{
			//keyCode ๋Œ€์‹  key ์‚ฌ์šฉ์„ ๊ถŒ์žฅ 
			let keyCode = e.keyCode; // // aํ‚ค๋ฅผ ๋ˆ„๋ฅด๋ฉด 65, Aํ‚ค๋ฅผ ๋ˆ„๋ฅด๋ฉด 65 ๋ฐ˜ํ™˜
			let key = e.key; // aํ‚ค๋ฅผ ๋ˆ„๋ฅด๋ฉด 'a', Aํ‚ค๋ฅผ ๋ˆ„๋ฅด๋ฉด 'A' ๋ฐ˜ํ™˜ 
			
			let s = 'keydown : keyCode -' + keyCode +',key-'+key+'<br>';
			
			divEL.innerHTML=s;
		};
		
		
		inputEL.onkeypress=e=>{
			//keypress ์ด๋ฒคํŠธ๋Š” ์‚ฌ์šฉํ•˜์ง€ ๋ง๊ฒƒ์„ ๊ถŒ์žฅ 
			let keyCode = e.keyCode; // // aํ‚ค๋ฅผ ๋ˆ„๋ฅด๋ฉด 97, Aํ‚ค๋ฅผ ๋ˆ„๋ฅด๋ฉด 65 ๋ฐ˜ํ™˜
			let key = e.key; // aํ‚ค๋ฅผ ๋ˆ„๋ฅด๋ฉด 'a', Aํ‚ค๋ฅผ ๋ˆ„๋ฅด๋ฉด 'A' ๋ฐ˜ํ™˜ 
			
			let s = 'keypress : keyCode -' + keyCode +',key-'+key+'<br>';
			
			divEL.innerHTML=s;
		};
		
		inputEL.onkeyup=e=>{
			//keypress ์ด๋ฒคํŠธ๋Š” ์‚ฌ์šฉํ•˜์ง€ ๋ง๊ฒƒ์„ ๊ถŒ์žฅ 
			let keyCode = e.keyCode; // // aํ‚ค๋ฅผ ๋ˆ„๋ฅด๋ฉด 65, Aํ‚ค๋ฅผ ๋ˆ„๋ฅด๋ฉด 65 ๋ฐ˜ํ™˜
			let key = e.key; // aํ‚ค๋ฅผ ๋ˆ„๋ฅด๋ฉด 'a', Aํ‚ค๋ฅผ ๋ˆ„๋ฅด๋ฉด 'A' ๋ฐ˜ํ™˜ 
			
			let s = 'keyup : keyCode -' + keyCode +',key-'+key+'<br>';
			
			divEL.innerHTML+=s;
		};
		
	</script>

</body>
</html>

 

 

</head>
<body>

	<h3>ํ‚ค ์ด๋ฒคํŠธ</h3>

	<p>
		์ˆซ์ž๋งŒ : <input type="text" class="inputNum">
	</p>

	<script type="text/javascript">
	
		const inputNumEL=document.querySelector('input.inputNum');
		
		const onlyNumber = e =>{
			
			/*let key = e.key || e.keyCode;
			if((key==='Enter' && ! e.shiftKey)||(key===13 && key!==16)){
				//Enter๋ฅผ ๋ˆ„๋ฅธ ๊ฒฝ์šฐ(Shift ํ‚ค๋ฅผ ๋ˆ„๋ฅด์ง€ ์•Š์€ ์ƒํƒœ)
			}
			*/
			
			let key = e.key;
			//keypress ์ด๋ฒคํŠธ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉด Backspace๋“ฑ์„ ๋ˆŒ๋Ÿฌ๋„ keypress ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒ๋˜์ง€
			//์•Š์œผ๋ฏ€๋กœ ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค. 
			if(key==='Backspace' || key ==='Tab' || key ==='ArrowLeft' || key ==='ArrowRight' || key === 'Delete'){
				
			return;
			}
				
			if(key<'0'||key>'9'){
				e.preventDefault();
				
			}
		};
		
		
		
		inputNumEL.addEventListener('keydown',e=> onlyNumber(e))
		
		
	</script>


	<p>
		์˜๋ฌธ์ž๋งŒ : <input type="text" class="inputAlph">
	</p>

	<script type="text/javascript">
	const inputAlphEl = document.querySelector('input.inputAlph');
	
	const onlyAlphabet = e =>{
		
		let key = e.key;
		if(key==='Backspace' || key ==='Tab' || key ==='ArrowLeft' || key ==='ArrowRight' || key === 'Delete'){
			
		return;
		}
			
		if((key<'A'||key>'Z')&&(key<'a'||key>'z')){
			e.preventDefault();
			
		}
		
	};
	
	inputAlphEl.addEventListener('keydown',e=>onlyAlphabet(e));
	
	</script>

	<p>
		์˜์ˆซ์ž : <input type="text" class="inputAlphNum">
	</p>

	<script type="text/javascript">
	const inputAlphNumEL = document.querySelector('input.inputAlphNum');
	const onlyAlphNum = e =>{
		let key = e.key;
		if(key==='Backspace' || key ==='Tab' || key ==='ArrowLeft' || key ==='ArrowRight' || key === 'Delete'){
			
		return;
		};
		
		if(!/^\w{1}$/.test(key)){
			e.preventDefault();
		}
	};
	
// 	//inputAlphNumEL.addEventListener('keydown',e=>onlyAlphNum(e));
	
	inputAlphNumEL.addEventListener('keydown',e=>onlyAlphNum(e));
	
	
	</script>


	<p>
		์ž…๋ ฅ๋œ ํ•œ๊ธ€ ์‚ญ์ œ : <input type="text" class="inputDeleteKor">
	</p>
	<script type="text/javascript">
	const inputDeleteKorEL=document.querySelector('input.inputDeleteKor');
	const deleteKorean=e=>{
		target.value=target.value.replace(/[ใ„ฑ-ใ…Ž ใ…-ใ…ฃ ๊ฐ€-ํžฃ]/g,'');
		
	};
	
	inputDeleteKorEL.addEventListener('keyup',e=>deleteKoeran(e));
	
	</script>

	<p>
		ํ•œ๊ธ€๋งŒ ์ž…๋ ฅ : <input type="text" class="inputKor">
	</p>
	<script type="text/javascript">
	const inputKorEL=document.querySelector('input.inputKor');
	
	const onlyKorean =e=>{
		let keyCode = e.keyCode;
		
		// ํ•œ๊ธ€์€ e.key๋กœ ํ™•์ธ ๋ถˆ๊ฐ€
		if( keyCode<12592 || keyCode>12687){
			e.preventDefault();
		}
		
	};
	inputKorEL.addEventListener('keypress',e=>onlyKorean(e));
	
	</script>

	<p>
		ํ•œ๊ธ€์ž…๋ ฅ ์ œํ•œ : <input type="text" class="inputNoKor">
	</p>
	<script type="text/javascript">
		const inputNoKorEL = document.querySelector('input.inputNoKor');
		
		//compositionstart ์ด๋ฒคํŠธ : ํ•œ๊ธ€๋“ฑ ์กฐํ•ฉ ๋ฌธ์ž๋ฅผ ์ž…๋ ฅํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ 
		
		inputNoKorEL.addEventListener('compositionstart',e=>{
			const self = e.currentTarget;
			self.blur();
			
			//๋‹ค์Œ ๋ฆฌํŽ˜์ดํŠธ์ „ ์‹คํ–‰ 
			requestAnimationFrame(()=> self.focus());
		});
		
		</script>


</body>
</html>

 

</head>
<body>

	<p>ํ•œ๊ธ€ ์ž…๋ ฅ ์ œํ•œ</p>

	<p>ํ•œ๊ธ€ ๊ฐ€๋Šฅ : <input type="text"></p>
	
	<p>ํ•œ๊ธ€ ์ œํ•œ : <input type="text" class="notKorean"></p>
	<p>ํ•œ๊ธ€ ์ œํ•œ : <input type="text" class="notKorean"></p>
	<p>ํ•œ๊ธ€ ์ œํ•œ : <input type="text" class="notKorean"></p>


	<p>ํ•œ๊ธ€ ๊ฐ€๋Šฅ : <input type="text"></p>
	
	<script type="text/javascript">
	const inputELements = document.querySelectorAll('input.notKorean');
	
	//์˜๋ฌธ ์ž…๋ ฅํ›„ ํ•œ๊ธ€ ์ž…๋ ฅํ•˜๋ฉด ์•ž์˜ ์˜๋ฌธ์ด ์‚ญ์ œ๋                                     ์ˆ˜ ์žˆ์Œ  
	const notKorean =e=>{
		const target = e.currentTarget;
		//target.value=target.value.replace(/^[\W]$/g,'');
		target.value=target.value.replace(/[ใ„ฑ-ใ…Ž ใ…-ใ…ฃ ๊ฐ€-ํžฃ]/g,'');
	};
	
	
	inputELements.forEach(inputEL=>inputEL.addEventListener('input',e=>notKorean(e)));
	</script>
	
	
</body>
</html>

 

 

</head>
<body>

	<h3>F12, ๋งˆ์šฐ์Šค ์šฐ์ธก</h3>

	<script type="text/javascript">
	window.addEventListener('load',()=>{
		document.addEventListener('keydown',e=>{
			if(e.key==='F12'){
				alert('๊ฐœ๋ฐœ์ž ๋„๊ตฌ ๋ง‰์Œ...')
				e.preventDefault();
			}
		});
		
		
		document.addEventListener('mousedown',e=>{
			if(e.button===2||e.button===3){
				alert('๋งˆ์šฐ์Šค ์šฐ์ธก ๋ˆ„๋ฅด๋ฉด ์˜ค๋Š˜ ๊ณผ์ œ ์žˆ๋‹ค.');
			}
		});
		
	});
	</script>


</body>
</html>

 

 

<style type="text/css">
.box {
	width: 150px;
	height: 150px;
	border: 1px solid black;
}
</style>
<link rel="icon" href="data:;base64,iVBORw0KGgo=">
</head>
<body>

	<h3>๋งˆ์šฐ์Šค ๊ด€๋ จ ์ด๋ฒคํŠธ</h3>

	<div class="box"></div>
	<hr>

	<div class=:console></div>

	<script type="text/javascript">
	const boxEL = document.querySelector('.box');		
	const consoleEL = document.querySelector('.console');		
	
	
	boxEL.addEventListener('mouseover',e=>{
		//๋งˆ์šฐ์Šค ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ์ฒด ์œ„๋กœ ์˜ฌ๋ผ์˜ฌ๋•Œ 
		
		e.currentTarget.style.backgroundColor='#ff0';
		
		consoleEL.innerHTML=`mouseover:<br>`;
	});
	
	boxEL.addEventListener('mouseout',e=>{
		//๋งˆ์šฐ์Šค ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ์ฒด๋ฅผ ๋ฒ—์–ด๋‚  ๋•Œ 
		consoleEL.innerHTML+=`mouseout:<br>`;
	});
	
	boxEL.addEventListener('mousedown',e=>{
		//๋งˆ์šฐ์Šค๋ฅผ ๋ˆ„๋ฅผ๋•Œ 
		consoleEL.innerHTML+=`mousedown:<br>`;
	});
	
	boxEL.addEventListener('mouseup',e=>{
		//๋งˆ์šฐ์Šค๋ฅผ ๋ˆŒ๋ €๋‹ค ๋†“์„๋•Œ 
		consoleEL.innerHTML+=`mouseup:<br>`;
	});
	
	boxEL.addEventListener('dblclick',e=>{
		//๊ฐ์ฒด๋ฅผ ๋”๋ธ”ํด๋ฆญํ•  ๋•Œ 
		consoleEL.innerHTML+=`dblclick:<br>`;
		
	});
	
	
	</script>
</body>
</html>

 

 

<style type="text/css">
.box {
	width: 300px;
	height: 700px;
	border: 3px dotted gray;
}
</style>

</head>
<body>

	<h3>๋งˆ์šฐ์Šค ํด๋ฆญ ์ขŒํ‘œ</h3>

	<div class="box"></div>

	<script type="text/javascript">
		const boxEL = document.querySelector('div.box');
		
		boxEL.addEventListener('click',e=>{
			
			//document์˜ ๊ฐ€์žฅ ์™ผ์ชฝ ์ง€์ ๋ถ€ํ„ฐ์˜ x,y ์ขŒํ‘œ(์Šคํฌ๋กค๋ฐ” ์ œ์™ธ)
			let x = e.clientX;
			let y = e.clientY;
			boxEL.innerHTML = `client ์ขŒํ‘œ: (${x},${y})<br>`;
			
			let x2 = e.pageX;
			let y2 = e.pageY;
			boxEL.innerHTML += `page ์ขŒํ‘œ: (${x2},${y2})<br>`;
			
			let x3 = e.offsetX;
			let y3 = e.offsetY;
			boxEL.innerHTML += `offset ์ขŒํ‘œ: (${x3},${y3})<br>`;
			
			let x4 = e.screenX;
			let y4 = e.screenY;
			boxEL.innerHTML += `screen ์ขŒํ‘œ: (${x4},${y4})<br>`;
		});
	</script>

</body>
</html>

 

 

<style type="text/css">
.box {
	width: 300px;
	height: 700px;
	border: 3px dotted gray;
}
</style>

</head>
<body>

	<h3>๋งˆ์šฐ์Šค + ctrl ๋˜๋Š” shift </h3>
	
	<div class="box"></div>
	
	<script type="text/javascript">

		const boxEL = document.querySelector('div.box');
	
		boxEL.addEventListener('click',e=>{
			// e.ctrlkey, e.shiftKey, e.alrKey
			if(e.ctrlkey){
				alert('ctrl+click');
			}else if(e.shiftKey){
				alert('shift+click')
				
			}
		
		});
	</script>

</body>
</html>

 

 

</head>
<body>

	<h3>change event</h3>
	<!-- 
		-select : ๋“œ๋กญ๋‹ค์šด์—์„œ ๊ฐ’์„ ์„ ํƒํ•œ ๊ฒฝ์šฐ ๋ฐœ์ƒ
		-<textarea>, <input type="text"> : ๊ฐ’์„ ํŽธ์ง‘ํ›„ ํฌ์ปค์Šค๋ฅผ ์ฝ์„๋•Œ ๋ฐœ์ƒ
		-<input type="checkbox">,<input type="radio"> :๊ฐ’์„ ์„ ํƒํ•œ ๊ฒฝ์šฐ  
	 -->

	<form name="myForm">
		<p>
			<select name="selectEmail" onchange="changeEmail();">
				<option value="">์„ ํƒ</option>
				<option value="naver.com">๋„ค์ด๋ฒ„</option>
				<option value="hanmail.net">ํ•œ๋ฉ”์ผ</option>
				<option value="gmail.com">์ง€๋ฉ”์ผ</option>
				<option value="nate.com">๋„ค์ดํŠธ</option>
				<option value="direct">์ง์ ‘์ž…๋ ฅ</option>
				
			</select> 
			
			<input type="text" name="email1">@ <input type="text"
				name="email2" readonly>
		</p>
	</form>

	<script type="text/javascript">
		function changeEmail() {
			const f = document.myForm;
			let s = f.selectEmail.value;

			if (s !== 'direct') {
				f.email2.value = s;
				f.email2.readOnly = true;
				f.email2.focus();

			} else {
				f.email2.value = '';
				f.email2.readOnly = false;
				f.email2.focus();

			}

		}
	</script>


</body>
</html>

 

<style type="text/css">
.box{
	width: 300px;
	height: 300px;
	border: 3px dotted gray;
}
</style>

<script type="text/javascript">
function init() {
	const boxEL = document.querySelector('.box');
	
	boxEL.addEventListener('mouseover', e=>boxEL.style.backgroundColor='#ff0');
	boxEL.addEventListener('mouseout', e=>boxEL.style.backgroundColor='');
}

//init(); ์—๋Ÿฌ : DOM์ด ์ค€๋น„๊ฐ€ ์•ˆ๋œ ์ƒํƒœ 
window.addEventListener('load',e=>init());



</script>

</head>
<body>


	<h3>load ์ด๋ฒคํŠธ</h3>
	<!-- 
		-load ์ด๋ฒคํŠธ 
		 : ์Šคํƒ€์ผ๋“ฑ ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๋ฅผ ํฌํ•จํ•˜์—ฌ ์ „์ฒด ํŽ˜์ด์ง€๊ฐ€ ๋กœ๋“œ๋˜๋ฉด ์ด๋ฒคํŠธ๊ฐ€ ์‹œ์ž‘
		 : HTML์˜ DOM ํŠธ๋ฆฌ ์ž‘์„ฑ์ด ์™„๋ฃŒ ๋ฐ ์ด๋ฏธ์ง€, ์Šคํƒ€์ผ๋“ฑ ์™ธ๋ถ€์ž์›์ด ๋ถˆ๋Ÿฌ์˜ค๋Š”๊ฒƒ์ด ๋๋‚ฌ์„๋•Œ ๋ฐœ์ƒ
	 -->
	 
	 <div class="box"></div>


</body>
</html>