everyday com-eat
작성일
2022. 1. 27. 17:27
작성자
갱수터
728x90

동적 바인딩

- 새로 추가된 html 요소에 이벤트가 반응 할 수 있도록 만드는 방법

 

<ul id="ul01">
	<li>
		<button type="button" class="add">추가</button>
		<button type="button" class="del">제거</button>
	</li>
</ul>

<script type="text/javascript">
	var $ul01,
	liHtml = '';
	liHtml += '<li>';
	liHtml += '<button type="button" class="add">추가</button> ';
	liHtml += '<button type="button" class="del">제거</button> ';
	liHtml += '</li>';
	$(function(){ //문서가 완료 됐을때 실행되는 영역
		$ul01 = $('#ul01');
	});
	
	//동적 바인딩 -> 인수 3개(이벤트 명, 선택자, 함수) 
	$(document).on('click', '.add', function() { //화면에 문서가 로드가 되었을때 사용자가 클릭하면
		console.log('클릭');
		$ul01.append(liHtml);			
	});
	
	$(document).on('click', '.del', function() { 
		$(this).parent().remove();			
	});
</script>

 

 

실습1

아래의 추가 버튼 클릭시 행을 복제 하여 행추가, 제거 버튼 클릭시 행 제거를 하도록 하시오.

(input의 값은 초기화, 삭제는 행 2개 이상일 경우에만 삭제 가능하도록)

<style type="text/css">
	.bg01{background-color: #f00;}
	.bg02{background-color: #0f0;}
	.bg03{background-color: #00f;}
</style>

<button type="button" id="btn01">배경색상전환</button>

 

풀이

var bg = $('style').text();
	$(function() {
		for(var i=0; i<bg.length; i++){
			$('#btn01').click(function() {
				console.log(bg)
				$('body').css('background-color', bg);
			});
		}
	});
1. addClass를 생각못하고 CSS() 메서드만 생각해서 style태그를 어떻게 불러와야하나 계속 고민함 > style '태그'니깐 똑같이 선택자로 불러오면 됨
2. text() 메서드로 style태그안 모든 문자 다 콘솔에 찍어놓고 어떻게 뒤에 '#f00','#0f0','#00f'를 배열에 넣을까 고민함 > html로 찍어봤는데 undefined 나옴 해결 못함
3. 굳이 조건문 안 쓰고 전역변수 선언해 놓고 함수 안에 조건문 줬으면 됐다... 

 

정답

$(function() {
	var $body = $('body'),
	classArray = ['bg01', 'bg02', 'bg03'],
	cnt=0;
	$('#btn01').click(function() {
		$body.removeClass(classArray).addClass(classArray[cnt]); //배열 이용
		//$body.removeClass('bg01 bg02 bg03').addClass('bg0' + (cnt+1)); 배열이용안할때
		cnt++;
		if(cnt>=classArray.length)cnt=0;
	});
});
html body에 class=""로 선언 안했는데 style에 선택자로 써둔걸 addClass 한다는 개념이 머리에 안들어왔다... 

 

 

실습2

아래의 추가 버튼 클릭시 행 추가, 제거 버튼 클릭시 행제거, 토글버튼 클릭시 행의 배경색 빨강과 흰색으로 변경되도록 하시오.

<ul id="ul01">
	<li>
		<button type="button" class="add">추가</button>
		<button type="button" class="del">제거</button>
		<button type="button" class="toggle">토글</button>
	</li>
</ul>

 

풀이

var li = document.querySelector('#ul01').innerHTML;

$(document).on('click','.add', function(){
	$('#ul01').append(li);			
});

$(document).on('click','.del', function(){
	$(this).parent().remove();	
});

$(document).on('click','.toggle', function(){
	var s = $(this).parent().css('background-color');

	if(s == '#fff'){
		$(this).parent().css('background-color','#f00');
	}else {
		$(this).parent().css('background-color','#fff');
	}
});
1.  또 class 이용할 생각 못하고 조건문...
2. 실습1 이랑 같은 html 파일이라 style 태그 똑같이 이용할 수 있는데 생각 못함
3. 제이쿼리는 background-color 값 rgb, rgba 형식으로 반환해서 조건문으로 hex 형식 '#f00', '#fff' 넣어봤자 인식못함

 

정답

var li = document.querySelector('#ul01').innerHTML;

$(document).on('click','.add', function(){
	$('#ul01').append(li);			
});

$(document).on('click','.del', function(){
	$(this).parent().remove();	
});

$(document).on('click','.toggle', function(){
	$(this).parent().toggleClass('bg01');
});

 

 

 

728x90

'{ "Hello World!" }; > JavaScript/jQuery' 카테고리의 다른 글

js/id, for 속성에 인덱스 부여하기  (0) 2022.04.12
(jQuery) Ajax  (0) 2022.01.29
js/ 속성 조작 메서드(prop) 실습  (0) 2022.01.23
(jQuery) 메서드  (0) 2022.01.23
(jQuery) 제이쿼리 함수, 선택자  (0) 2022.01.14