πŸ‘¨‍πŸ’» Web Development/HTML | CSS | JS | jQuery

[Day2] JS 2 - λ³€μˆ˜, μ—°μ‚°μž, μžλ£Œν˜•, ν‚€λ³΄λ“œ

Kim_dev 2022. 11. 22. 01:17

[Day2] JS 2 [11/21] 

 

--볡슡--

1. λͺ¨λ‘ 선택 μ²΄ν¬λ°•μŠ€ 처리 

<div>
      <input type="checkbox">λͺ¨λ‘ 선택
      <br>
      <input type="checkbox">
      <input type="checkbox">
      <input type="checkbox">
      <input type="checkbox">
</div>

   

   λͺ¨λ‘ μ„ νƒμ΄λΌλŠ” 체크 λ°•μŠ€λ₯Ό μ²΄ν¬ν•˜λ©΄ λ‚˜λ¨Έμ§€ λͺ¨λ“  체크 λ°•μŠ€λ₯Ό μ²΄ν¬ν•˜λ„λ‘ μ½”λ”©ν•˜μ„Έμš”.

-js-

  <script>  
   document.querySelector("div > input[type=checkbox]:first-of-type").onclick = function (){
	   // aler t("이벀트 확인")
	   //alert( this.checked );
	   // getAttribute()
	   
	   // :not(selector)
	   var ckbs = document.querySelectorAll("div > input[type=checkbox]:not( input[type=checkbox]:first-of-type)");
	   for (var i = 0; i < ckbs.length; i++) {
		  ckbs[i].checked = this.checked ;
	   } // for	   
   }
</script>

-jquery-

// $(":checkbox:first-of-type").click(function (){
$(":checkbox").eq(0).click(function (){
  // $(":checkbox:not:(first-of-type)")
  
  // filter둜 μ²«λ²ˆμ§Έκ°€ μ•„λ‹Œ 것듀 확인
  $(":checkbox").filter(function(index){
    return index >=1;
    })
    .click(function() {
      $(this).hide();
    });
  });
  
  // μ§„μ§œμ½”λ”©
  $(":checkbox")
    .filter(function(index){
      return index >= 1;
    }).prop("checked", $(":checkbox").eq(0).prop("checked"));
    // .prop("checked", $(this).prop("checked"));
  });

* $("input[type=checkbox]") = $(":checkbox")

 

2. p νƒœκΈ€ λ™μ μœΌλ‘œ 10개 μƒμ„±ν•˜κ³ ,  p νƒœκ·Έλ₯Ό 클릭할 λ•Œ κ·Έ p νƒœκ·Έλ₯Ό μˆ¨κΈ°λŠ” js 코딩을 ν•˜μ„Έμš” 

-js-

 <script>
   for (var i = 1; i <= 10 ; i++) {
	 // DOM μ‚¬μš© - μš”μ†Œ μ‘°μž‘(  생성, μˆ˜μ •, μ‚­μ œ  )
	 // Document    Object Model 
	 //      λ¬Έμ„œ     -> 객체             +  속성, λ©”μ„œλ“œ
	 let pEle = document.createElement("p");  // Node	 
	 pEle.innerText = "μƒμ„±λœ p - " + i;
	 pEle.style.border = "1px solid gray";
	 // pEle 클릭 이벀트 등둝 - addEventListener()/ removeEventListener()
	 pEle.addEventListener("click", function( ) {
	 	this.style.display = "none";
	 });	 
	 document.body.appendChild(pEle);	 
  } // for
 </script>

* DOM : λ¬Έμ„œλ₯Ό κ°μ²΄ν™”μ‹œν‚€λŠ” 것 (속성 λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•΄μ„œ)

  ex) document.createElement("p") -> μš”μ†Œ 생성 DOM λ©”μ„œλ“œ

-jquery-

<script>
  // jquery method :  body.append( p ),    p.appendTo(body)
  for (var i = 1; i <= 10 ; i++) {
  $("<p></p>")
    .text( "μƒμ„±λœ p - " + i)
    .css("border", "1px solid red")
    .click( function (){
      $(this).hide();
    })
    .appendTo($("body"));
  } // for
 </script>

* append μ’…λ₯˜ 두가지

  

 

3. select νƒœκ·Έμ—μ„œ κ³Όλͺ©μ„ μ„ νƒν•΄μ„œ  λΌλ””μ˜€λ²„νŠΌμ˜ μ„ νƒν•œ κ³Όλͺ©μ„ μ²΄ν¬ν•˜λŠ” js 코딩을 ν•˜μ„Έμš”

 <select id="selsubject" >
   <option>μ„ νƒν•˜μ„Έμš”.</option>    
   <option value="kor">κ΅­μ–΄</option> 
   <option value="eng">μ˜μ–΄</option> 
   <option value="mat">μˆ˜ν•™</option>
   <option value="pe">체윑</option> 
</select>
 <br>
 <input type="radio" name="subject"   value="kor"><label>κ΅­μ–΄</label>
 <input type="radio"  name="subject"  value="eng"><label>μ˜μ–΄</label>
 <input type="radio"  name="subject"  value="mat"><label>μˆ˜ν•™</label>
 <input type="radio"  name="subject"  value="pe"><label>체윑</label>

-js-

 <script>
    document.getElementById("selsubject").onchange = function (){
    	// console.log( "이벀트 확인~" );
    	// alert(  this.selectedIndex );
    	// options μ»¬λ ‰μ…˜
    	var svalue = this.options[this.selectedIndex].value ;
    	// alert( this.options[this.selectedIndex].text );
    	// alert(  svalue );
    	if(svalue == "μ„ νƒν•˜μ„Έμš”."){
    		alert("κ³Όλͺ©λ§Œ μ„ νƒν•˜μ„Έμš”.");
    		return;
    	}
    	
    	var radios = document.getElementsByName("subject");
    	// alert( radios.length );
    	for (var i = 0; i < radios.length; i++) {
			if( radios[i].value ==  svalue ){
				radios[i].checked = true;
				break;   // return;
			} // if
		} // for
    	
    }
 </script>

-jquery-

 <script>
    $("#selsubject").change(function() {
    	 // var svalue =  $(this).val() ;              // "kor"
    	 
    	 // $("input[type=radio]")
    	 // jquery selector    -   :radio   
    	 // jquery method    -  each() 
    	 /*
    	 $(":radio").each(function(i, element) {
    	 	  if(  $(element).val() ==  svalue )  $(element).prop("checked", true);
    	 });
    	 */
    	 $(":radio[value="+  $(this).val()  +"]").prop("checked", true);
    	 
    });
 </script>

3-1. λΌλ””μ˜€ λ²„νŠΌ 선택 -> select 선택

-js-

 <script>
     /*
     // document.getElementById("selsubject").options
     // children - DOM λ©”μ„œλ“œ 
     var ops = document.getElementById("selsubject").children;
     // alert( ops.length );
     // ops[4].setAttribute("selected", "selected");
     ops[4].selected = true;
     */
     
     var ops = document.getElementById("selsubject").children;
     
     var radioIndex = 0;
     var radios = document.getElementsByName("subject");
     // [문제] index  
     //   μ™œ ?    4
    // let ν‚€μ›Œλ“œ / var ν‚€μ›Œλ“œ 차이점 X		 
     //for (var i = 0; i < radios.length; i++) {  	 
     for (let i = 0; i < radios.length; i++) {	 
		// if( radios[i].checked ) radioIndex = i;
		radios[i].onclick = function (){
			 // alert( i + " /  " + this.value ) ;
			ops[i+1].selected = true;
		} // click
	} // for
	// alert( radioIndex  )  
 </script>

-jquery-

<script>
   // var opts =   $("#selsubject > option");
   $(":radio[name=subject]").click(function() {
   	     //  jquery method :  index()
   	     var idx =   $(":radio[name=subject]").index( this );
         // alert( idx );
         // ex01.html:48 Uncaught TypeError: $(...)[(idx + 1)].prop is not a function
         //$("#selsubject > option")[idx+1].prop("selected", true);
         $("#selsubject > option").eq(idx+1).prop("selected", true);
   });
</script>

5. <img src="../images/pic_bulboff.gif" alt="" id="bulb">

   마우슀λ₯Ό 올리면 λΆˆμ΄μΌœμ§€κ³ , 마우슀λ₯Ό 내리면 뢈이 끄지도둝 js μ½”λ”©ν•˜μ„Έμš”.

-js-

   var blub = d.g("bulb");
   blub.onmouseover = function (){
       this.src = "on.gif";
       event.srcElement = "on.gif";
   }
   blub.onmouseout = function (){
      this.src = "off.gif";
       event.srcElement = "off.gif";
   }

-jquery-

   $("#bulb").hover(
       function (){  // mouseover
           attr() / prop()
       }, 
       function (){  // mouseout
       } 
   );

λ³€μˆ˜

[ js λ³€μˆ˜λ₯Ό μ„ μ–Έ 4가지 방법 ]

    1)  var i;

    2)  let i; 

    3)  const i;

    4)  i=100;

    

 1. λ³€μˆ˜ ?   데이터  μ €μž₯ 곡간

 2. μ‹λ³„μž(λ³€μˆ˜) μ„ μ–Έ ν˜•μ‹   

    1) 문자, 숫자, _ , $ 포함될 수 μžˆλ‹€.

    2) 숫자둜 μ‹œμž‘ X

    3) var $$$$;    X  μ™œ ?    jQuery(selector)   ==    $(selector)

    4) λŒ€μ†Œλ¬Έμž ꡬ뢄 ν•œλ‹€. 

    5) μ˜ˆμ•½μ–΄ X     var _var;

 

- var ν‚€μ›Œλ“œ : 2015  κΉŒμ§€ js μ½”λ”© μ‚¬μš©

- let ν‚€μ›Œλ“œ  + const ν‚€μ›Œλ“œ : 2015( ES6 ) 이후 μΆ”κ°€

 

- var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” 쀑볡 μ„ μ–Έ O + κ°’ μœ μ§€

- let ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” 쀑볡 μ„ μ–Έ X

 

- var lastName =   'λ¬Έμžμ—΄' ;

- z =   1 + "2";       =>    "12"

   z  = 1 + 2 + "3"       =>  3 +"3"  => "33"

- let $$ = 200;  κ°€λŠ₯ν•˜λ‹€.  (jquery λ•Œλ¬Έμ— $μ‚¬μš©ν•˜μ§€λ§μž)


let ν‚€μ›Œλ“œ

  1.   let 둜 μ„ μ–Έλœ λ³€μˆ˜λŠ” μž¬μ„ μ–Έν•  수 μ—†λ‹€.

  2.  let 둜 μ„ μ–Έλœ λ³€μˆ˜λŠ” μ‚¬μš©ν•˜κΈ° 전에 μ„ μ–Έν•΄μ•Ό λœλ‹€. 

  3. let둜 μ„ μ–Έλœ λ³€μˆ˜λŠ”     κΈ€λ‘œλ²Œ λ²”μœ„, ν•¨μˆ˜ λ²”μœ„  + λΈ”λ‘λ²”μœ„

      var                             κΈ€λ‘œλ²Œ λ²”μœ„, ν•¨μˆ˜ λ²”μœ„

// Global Scope( μ „μ—­λ³€μˆ˜ )
     var x ;
     
     function test(){
    	 // Function Scope ( μ§€μ—­λ³€μˆ˜ )
    	 var y;
 
    	 // Block Scope
    	 {
    		 let z ;
    	 }	 
     }

*ν˜Έμ΄μŠ€νŒ… : λΈ”λŸ­ 맨 μœ„λ‘œ μ„ μ–Έλœ 코딩이 올라감 (var O let X)


const μƒμˆ˜

    1. μž¬μ„ μ–Έ ν•  수 μ—†λ‹€. 

    2. μž¬ν• λ‹Ή ν•  수 μ—†λ‹€. 

    3. 블둝λͺ¨λ“œ( block scope ) O

    

    [ js  μ—μ„œ const ν‚€μ›Œλ“œ μ‚¬μš© ? ]

    항상 λ³€κ²½ν•  수 μ—†λŠ” .....

    const array

    const object

    const function

    const RegExp

 

*typeof

var data;  // [ undefined ]
data = 10;   // μ •μˆ˜ [ number ]
data = 3.14; // μ‹€μˆ˜ [ number ]
data = "admin"; //  λ¬Έμžμ—΄ [ string]
data = true;      //            [ boolean ]
data = [];           // [] == js λ°°μ—΄  [ object]
data = {};           // {} == js 객체(Object) [ object]  
data = function (){};  // js ν•¨μˆ˜  [ function ]
data = 'a';             // js char X     [ string ]

// typeof μ—°μ‚°μž
alert( typeof ( data ));

[ js μ—°μ‚°μž ]

   1. μ‚°μˆ  μ—°μ‚°μž.

   2. ν• λ‹Ή(λŒ€μž…) μ—°μ‚°μž.

   3. 비ꡐ μ—°μ‚°μž

   4. 논리 μ—°μ‚°μž

   5. 쑰건 μ—°μ‚°μž        ?:

   6. μœ ν˜• μ—°μ‚°μž 

<script>
     // μ¦κ°μ—°μ‚°μž      ++   --
     
     // λ¬Έμžμ—΄ μ—°κ²°μ—°μ‚°μž  +                 "홍길동" + "λ‹˜"
  
</script>

<script>
   // type(μœ ν˜•) μ—°μ‚°μž
   // typeof (10)   number
   
   //  instanceof μ—°μ‚°μž
</script>

<script>
   // &&   ||   !
   /*
   console.log(  true  &&   true);
   console.log(  true  ||   true);
   console.log(  !true  );
   */
   // js λΉ„νŠΈ μ—°μ‚°μž :  &  |  ^ ~  ,                             <<    >>    >>>  
</script>

<script>
   /*
   console.log(   3  ==  5  );
            console.log(   3  ===  5  );  // euqal   value + type  νƒ€μž…κΉŒμ§€ λΉ„κ΅ν•˜λŠ” μ—°μ‚°μž.
   console.log(   3  !=  5  );
            console.log(   3  !==  5  );   // not equal  value + type
   console.log(   3  >  5  );
   console.log(   3  <  5  );
   console.log(   3  >=  5  );
   console.log(   3  <=  5  );
   */
   // ===
   // !==
   //	 ? :    μ‚Όν•­(쑰건) μ—°μ‚°μž
</script>

<script>
   /*
    var x = 5;   //  =  ν• λ‹Ή μ—°μ‚°μž
    x += 5;     // +=  볡합 λŒ€μž… μ—°μ‚°μž
    x -= 5;
    x *= 5;
    x /= 5;
    x %= 5;
    x **= 5;     λˆ„μŠΉ(power)
    */
</script>
<script>
    /*
    console.log(  3 + 5  );  // λ§μ…ˆ μ—°μ‚°μž   8
    console.log(  3 - 5  );  // λΊ„μ…ˆ μ—°μ‚°μž   -2
    console.log(  3 * 5  );  // κ³±μ…ˆ μ—°μ‚°μž   15
    console.log(  3 ** 5  );  // Math.pow(3,5)  λˆ„μŠΉ μ—°μ‚°μž
    // console.log(  3 / 0  );  // λ‚˜λˆ—μ…ˆ μ—°μ‚°μž   0.6
    // μ •μˆ˜ / 0 Infinity(λ¬΄ν•œλŒ€)
    console.log(  3.1 / 0  );  // λ‚˜λˆ—μ…ˆ μ—°μ‚°μž   0.6
    // μ‹€μˆ˜ / 0 Infinity(λ¬΄ν•œλŒ€)
    
    // console.log(  3 % 5  );  // λ‚˜λ¨Έμ§€ μ—°μ‚°μž  3
    // console.log(  3 % 0  );  // NaN ( == Not a Number )
    */
</script>

μžλ£Œν˜•( data type)

  [ typeof μ—°μ‚°μž ]

  1.  number

  2. string 

  3. boolean

  4. function 

  5. object  - js array,  js object

  

  js νƒ€μž…(μœ ν˜•)은  동적 μœ ν˜•μ΄λ‹€.  

    var x;         // typeof    undefined
    x = 5;          //        "          number
    x = "admin"; //      "           string
    x = [] ;           //                object
    x = function (){}  //       function 
    
    
    [μ§€μˆ˜ ν‘œκΈ°λ²•]
    let y  =  123e5;     //12300000;
     y = 123e-5;          //0.00123
     
     [js  μ •μˆ˜,μ‹€μˆ˜ = number]
     let z = 100;
     z = 3.14;
     
     
     [typeof μ—°μ‚°μž]
     
     console.log(   typeof   100 );
     console.log(   typeof   (100) );
     
     
     var xx;         // undefined
     var xx = "";  // string
// js λ°°μ—΄   -              λŒ€κ΄„ν˜Έ   []
   // let m = [ 1,2,3 ];
   
   /* 
   let m = [];
   m[0]=1;
   m[1]=2;
    m[2]=3;
    */
    
// js 객체 -    μ€‘κ΄„ν˜Έλ₯Ό μ‚¬μš©ν•œλ‹€.  {}
    let p1 = { 
    		           name:"admin"
    		           , age:20 
    		     };
    console.log( p1.name );
    console.log(  p1["age"]);

   [ ν‚€λ³΄λ“œ κ΄€λ ¨ 이벀트 ]

   1. keydown 이벀트   :  ν‚€λ³΄λ“œλ₯Ό λˆ„λ₯Ό λ•Œ   Ctrl, F1 인식 O, λŒ€μ†Œλ¬Έμž ꡬ뢄 X, ν‚€λ³΄λ“œ μ·¨μ†Œ κ°€λŠ₯

   2. keypress 이벀트  :  ν‚€λ³΄λ“œλ₯Ό λˆ„λ₯Ό λ•Œ   Ctrl, F1 인식 X, λŒ€μ†Œλ¬Έμž ꡬ뢄 O, ν‚€λ³΄λ“œ μ·¨μ†Œ κ°€λŠ₯

   3. keyup 이벀트      :  ν‚€λ³΄λ“œ 놓을 λ•Œ

<style>
  *{
    box-sizing: border-box;
    margin: 0;
    padding: 0;
  }
  
  /* css μ„ νƒμž */
  input[type=text]{
     border: 1px solid grey;
     padding: 5px;
     font-size: 20px;
     margin:10px;
     width:90%;
  }
  
  /* νŠΉμ •μƒνƒœ ,   :μ˜μ‚¬ν΄λž˜μŠ€ */
  input[type=text]:focus{
     background-color: yellow;
  }
</style>
<!-- autofocus="autofocus" -->
<input type="text"  id="txt01"  tabindex="1"  onkeyup="txt01_keyup();">
<br>
<input type="text"  id="txt02"  tabindex="2">
<script>
    // global scope
    var txtbox01 ; 
    let  txtbox02;

     window.onload = function (){
    	 // μ΄ˆκΈ°ν™”
    	 // function scope
    	 // var txtbox01 = document.getElementById("txt01");    	 
    	 txtbox01 = document.getElementById("txt01");
    	 txtbox02 = document.getElementById("txt02");
    	 
    	 txtbox01.focus();
    	 
    	 // focus  : μ΄ˆμ μ„ 맞좜 λ•Œ μΌμ–΄λ‚˜λŠ” 이벀트 
    	 // blur    : μ΄ˆμ μ„ μžƒμ„ λ•Œ      "
     }
     
     function txt01_keyup(){
    	 /*
		 // 이벀트 정보 :  event 객체 
		 // event.srcElement μ΄λ²€νŠΈκ°€ λ°œμƒν•œ 객체
		 // console.log( event.type ); // "keyup"		 
		 let uniCode = event.keyCode ;
		 txtbox02.value = uniCode + "(" + String.fromCharCode(uniCode)  +")";
		 */
		 
		 // μž…λ ₯을 끝낸 ν›„ μ—”ν„°ν‚€λ₯Ό λˆ„λ₯Ό λ•Œ....  
		 if (  event.keyCode  == 13 ) {
			 txtbox02.value =  txtbox01.value;
		} // if
	 
	 } // txt01_keyup
     
</script>

ν•­μ˜ 갯수 선택 

<select id="count">
   <!-- option[value=$]*15>{$} -->
</select>

γ„΄ 동적좔가

 

-js-

    // selectIndex 속성
    // options μ»¬λ ‰μ…˜
    // options[selctedIndex].value
    // options[selctedIndex].text
    // new μ—°μ‚°μž
    // Option 객체 ( text, value)
    var count =  document.getElementById("count");
    count.options[0] = new Option("μ„ νƒν•˜μ„Έμš”.", 0);
    
    for (let i = 1; i <=15; i++) {
    	count.options[i] = new Option(i, i);
	}
    count.options[10].selected  = true;   // setAttribute("selected", "selected")

-jquery-

   $("#count").append(  $("<option value='0'>μ„ νƒν•˜μ„Έμš”.</option>") );
   for (let i = 1; i <=15; i++) {
	   $("#count").append(  $("<option value='"+i+"'>"+i+"</option>") );
	} // for
	$("#count option").eq(15).prop("selected", true);

νŒ€μ› 이름 μž…λ ₯ 

<input type="text"  id="name" name="name" autofocus="autofocus" >
  <!-- onkeydown="name_keydown();" -->
<br>
<div  id="demo">
</div>

γ„΄ 동적좔가

 

-js-

<script>
   function name_keydown(){
	   var demo = document.getElementById("demo");
	   
	   if( event.keyCode == 13 ){  // μ—”ν„° μΉ  λ•Œ
		   var name = document.getElementById("name");
	   
		   // 1.
		   // demo.innerHTML += "<input type='checkbox' value='"+ name.value+"'>" + name.value +"<br>";
		   
		   // 2. DOM μš”μ†Œ 생성 μΆ”κ°€
		   var ckb = document.createElement("input");  // <input>
		   ckb.setAttribute("type", "checkbox"); // <input type='checkbox'>
		   ckb.setAttribute("value", name.value); // <input type='checkbox'  value='μ—„νƒœν˜'>
		   demo.appendChild(ckb);
		   
		   var textnode = document.createTextNode( name.value );
		   demo.appendChild(textnode);
		   
		   var br = document.createElement("br"); 
		   demo.appendChild(  br  );
		   
		   name.value = "";
		   name.focus();
	   } // if
   } // function
</script>

 

-jquery-

<script>
   $("#name").keydown(function() {
   	    if( event.keyCode == 13 ){
   	    	var value = $(this).val();
   	    	
   	    	//var content = "<input type='checkbox' value='"+ value +"'>" + value +"<br>"; 
   	    	//$("#demo").append($(content));
   	    	
   	    	var $ckb = $("<input>").attr({
   	    		type:"checkbox",
   	    		value:value
   	    	})
   	    	
   	    	var $text = $("<lable>"+  value +"</label>");
   	    	
   	    	/*
   	    	$("#demo")
   	    	    .append($ckb)
   	    	    .append($text)   	    	    
   	    	    .append($("<br>"));
   	    	*/
   	    	$("#demo").append($ckb, $text, "<br>");
   	    	
   	    	$("#name")
   	    	      //.val("")
   	    	      .select()
   	    	      .focus();
   	    } // if
   });
</script>