코딩 개발/Javascript

jQuery 3탄(요소선택 응용, mouseenter, mouseleave, hover, prop)

호소세 2023. 6. 21. 21:52
728x90
반응형

어쩌다 보니 3탄까지 가게 되었습니다.

1탄 :  https://pabeba.tistory.com/175

2탄 : https://pabeba.tistory.com/176

 

slideToggle

html에 작성된 내용이 스르륵 내려오는 형태를 보여줍니다.

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css">
  <script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.slim.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<title>jquery toggle</title>
<style type="text/css">
	#detailInfo{
		display: none;
	}
	#toggleSpan{
		background-color: yellow;
	}
</style>
</head>
<body>
<div class="container pt-3">
<script type="text/javascript">
	$(function() {
		$("#toggleSpan").click(function() {
			$("#detailInfo").slideToggle(1000,function(){
				if($(this).css("display")=="none"){//보이지 않는 상태 : toggleSpan 에 정보 더보기 
					$("#toggleSpan").text("정보 더보기");
				}else{//보이는 상태 : toggleSpan 에 접기 
					$("#toggleSpan").text("접기");
				}
			});
		});
	});
</script>
<span id="toggleSpan">정보 더보기</span>
<br><br>
<p id="detailInfo">
호소세<br><br>
출생
2000년 13월 36일, 서울특별시 <br><br>
국적
대한민국파일:대한민국 <br><br>
본관
호소 호씨[3]<br><br>
신체
185.7cm 80kg<br><br>
가족
부모님, 남동생, 형, 누나, 언니, 오빠 <br><br>
</p>
</div>
</body>
</html>

이번에 새로 추가된 내용입니다.

document ready를 작성하지 않아도 저렇게만 작성하여도 dom이 생성되고 함수를 사용할 수 있게 되었습니다. 코드가 줄었네요 ㅎㅎ

 

그래서 아이디가 toggleSpan 인 태그를 누르면 숨겨진 내용이 나오게 됩니다.

직접 코드를 옮겨서 확인해 보세요. 

 

 

요소선택 응용버전

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css">
  <script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.slim.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<title>jquery form 요소 제어</title>
</head>
<body>
	<div class="container  pt-3">
		<form action="test.jsp" id="testForm">
			<br> <input type="checkbox" name="hobby" value="노래">노래<br>
			<input type="checkbox" name="hobby" value="코딩">코딩<br> 
            <input type="checkbox" name="hobby" value="독서">독서<br> 
            <input type="submit" value="전송">
		</form>
		<script type="text/javascript">
		 $(function(){
			 $("#testForm").submit(function() {
				// testForm id 폼의 checkbox name이 hobby인 요소들 중 체크되어진 요소에 접근 
				let  hobbyElement=$("#testForm :checkbox[name=hobby]:checked");
				if(hobbyElement.length==0){
					alert("취미를 하나 이상 선택하세요");
				}else{
					for(let i=0;i<hobbyElement.length;i++){
						// hobbyElement : jquery object , hobbyElement[i] : javascript object 
						// $(hobbyElement[i]) : jquery object 로 만들어서 val() jquery 함수를 적용해야 한다 
						alert($(hobbyElement[i]).val());
					}
				}
			 	return false;	//submit 시에 return false를 하면 전송되지 않는다 
			 });
		 });
		</script>
	</div>
</body>
</html>

1. html 태그를 가져오는 방식이 신기한데요

let hobbyElement=$("#testForm :checkbox[name=hobby]:checked");

id가 testForm 인 체크박스 중에 name 이 hobby이고 체크가 된 태그를 할당했습니다.

2. 체크된 태그를 for문을 사용하여 알람이 뜨게 하는데

3. 🌟javascript 객체로 변경된 hobbyElement를 다시 jQuery 객체로 변경해야 합니다.🌟

4. 변경된 객체로 jQuery 문법을 사용하면 됩니다.

 

mouseenter, mouseleave

<body>
	<div class="container pt-3">
		<span id="infoSpan">마우스를 올려보세요</span><br> 
		<img src="images/록키.jpg" class="img-circle" id="friendImg" width="304" height="236">
	</div>
	<script type="text/javascript">
		$(function(){
			$("#infoSpan").mouseenter(function() {
				$("#friendImg").show();
			});
			$("#infoSpan").mouseleave(function() {
				$("#friendImg").hide()
			});
		});
	</script>
</body>

문법 그대로입니다.

마우스가 span 안으로 들어가면 사진이 보이게 됩니다.

 

hover

hover 함수도 mouseenter와 비슷합니다. 하지만 하나 다른 것은 나갔다가 들어오는 함수를 한 번에 작성할 수 있습니다.

$(function(){
	$("#membody td").click(function() {
		alert($(this).text());
	});
	$("#membody td").hover(function() {//마우스 진입시 동작되는 익명함수
		$(this).css("background","yellow");
	    $("#memInfo").text($(this).text());
	}, function() {//마우스 벗어나면 동작되는 익명함수 
		$(this).css("background","white");
		$("#memInfo").text("");
	});
});

hover 함수를 보시면 내부 함수가 컴마(,)를 사용하여 2개로 나누어져 있습니다.

$("#membody td"). hover(

function() { $(this). css("background", "yellow");

$("#memInfo"). text($(this). text()); },

function() {//마우스 벗어나면 동작되는 익명함수

$(this). css("background", "white");

$("#memInfo"). text("");

});

보이시죠. 첫 번째 함수와 두 번째 함수

mouseenter leave와 이러한 차이점이 있습니다.

 

prop

<body>
<div class="container pt-3">
<input type="checkbox" id="mailing">메일체크<br>
<input type="button" id="checkBtn1" value="체크하기">
<input type="button" id="checkBtn2" value="체크해제하기">
<input type="button" id="checkBtn3" value="체크상태확인">
<script type="text/javascript">
	$(function() {
		$("#checkBtn1").click(function() {
			$("#mailing").prop("checked", true);
		});
		$("#checkBtn2").click(function() {			
			$("#mailing").prop("checked", false);//체크해제상태로 변경 
		});
		$("#checkBtn3").click(function() {			
			alert($("#mailing").prop("checked"));//체크박스 상태를 확인 
		});
	});
</script>
</div>
</body>

직접 파일을 옮겨서 확인하시면 더 재밌습니다. 저는 이거 처음 할 때 '메일함을 만들 수 있겠구나'라고 소리 질렀습니다.

 

prop은 property를 변경하거나 가져오는 데 사용되는 함수입니다.

위에 사용한 checked 외에도 button을 prop("disabled", true) 이런 식으로 변경할 수 있습니다.

selected, readonly 등도 가능하답니다.

 

소감

딥 다이브는 정말 끝이 안 보입니다. 깊은 해저로 가는 것이 아닌 끝이 없는 우주로 나아가는 기분입니다. 딥 유니버스 다이브라고 새로 명명하고 싶습니다.

하지만 이렇게 힘이 들어도 포기하지 않고 웃는 사람이 일류라고 합니다. 모두 힘들지만 빵끗 웃어보아요~

반응형