[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>
์ต๊ทผ๋๊ธ