전체 글: 407개의 글

JavaScript - 이벤트

Posted by ironmask84
2015. 7. 28. 11:21 나는 프로그래머다!/HTML5


<!DOCTYPE html>
<html>
<body>
<input type="button" onclick="alert(window.location)" value="alert(window.href)" />
<input type="button" onclick="window.open('bom.html')" value="window.open('bom.html')" />
</body>
</html>


event target
->target은 이벤트가 일어날 객체를 의미한다.

event type
->이벤트의 종류를 의미한다.
   (
https://developer.mozilla.org/en-US/docs/Web/Reference/Events)

event handler
-> 이벤트가 발생했을 때 동작하는 코드를 의미한다. 
    위의 예제에서는 alert(window.location)이 여기에 해당한다.

출처 : https://opentutorials.org/module/904/6629


** 이벤트 등록방법

1. inline : 이벤트를 이벤트 대상의 태그 속성으로 지정하는 것이다.
<input type="button" onclick="alert('Hello world');" value="button" /> <input type="button" onclick="alert('Hello world, '+this.value);" value="button" />

2. property listener : 
이벤트 대상에 해당하는 객체의 프로퍼티로 이벤트를 등록하는 방식
event 객체에는 여러가지 정보가 담겨있다!!(console.dir(event); 확인)

<body>
<input type="button" id="target" value="button" />
<script>
var t = document.getElementById('target');
t.onclick = function(event){
alert('Hello world, '+event.target.value)
}
</script>

// I.E 8이하 버젼 호환을 위해서는 아래와 같이 추가 예외처리 필요

<input type="button" id="target" value="button" />
<script>
var t = document.getElementById('target');
t.onclick = function(event){
var event = event || window.event;
var target = event.target || event.srcElement;
alert('Hello world, '+target.value)
}
</script>


3. addEventListener() :
가장 권장하는 방식. 한 target에 여러 이벤트 등록 혹은 정의해 놓은 한 이벤트 핸들러를 여러 객체에 등록할 수 있다.


var t = document.getElementById('target');
if(t.addEventListener){
t.addEventListener('click', function(event){
alert('Hello world, '+event.target.value);
});
} else if(t.attachEvent){    // I.E 8이하 버젼의 호환을 위해..
t.attachEvent('onclick', function(event){
alert('Hello world, '+event.target.value);
})
}
// 한 target에 여러 이벤트를 등록
<input type="button" id="target" value="button" />
<script>
var t = document.getElementById('target');
t.addEventListener('click', function(event){
alert(1);
});
t.addEventListener('click', function(event){
alert(2);
});
</script
// 하나의 리스너로 여러 target에 적용
<input type="button" id="target1" value="button1" />
<input type="button" id="target2" value="button2" />
<script>
var t1 = document.getElementById('target1');
var t2 = document.getElementById('target2');
function btn_listener(event){
switch(event.target.id){
case 'target1':
alert(1);
break;
case 'target2':
alert(2);
break;
}
}
t1.addEventListener('click', btn_listener);
t2.addEventListener('click', btn_listener);
</script>

출처
https://opentutorials.org/module/904/6759
https://opentutorials.org/module/904/6760
https://opentutorials.org/module/904/6761

 

홍콩&마카오 여행 첫 업뎃!

Posted by ironmask84
2015. 7. 23. 00:59 해외여행/홍콩&마카오 - 2013


여행 다녀온지 2년이 넘었지만, 이제서야 첫 업뎃 ㅠㅠ

이번 캄보디아 여행 준비하면서..

익스피디아 에서 숙소 예약한 것이 생각났다!!

이번 캄보디아 여행 숙소도 익스피디아로 할까 생각중!!

호텔은 홍콩 도심 중심이었는데, 정확한 위치는 가물가물.. 차차 다시 확인해보기로 하고,
지금 봐도 꽤 숙박료가 비싸네 ㅋㅋ 
그래도 꽤나 쾌적해던 걸로 기억함.

차차 업뎃하기로 하고 오늘은 숙소 정보 사진 한장 올림 :)



 

JavaScript에서의 객체와 객체지향

Posted by ironmask84
2015. 7. 22. 15:47 나는 프로그래머다!/HTML5


기본적으로 배열이 0,1,2 ... 와 같이 숫자를 인덱스로 해서 값을 담아내는 그릇이라고 하면,
JavaScript에서의 객체는 이 인덱스가 숫자도 가능하지만, 문자로도 가능한 점이 특징이다.

따라서, 타 프로그래밍 언어에서는 연관배열(associative array) 또는 맵( map), 딕셔너리(Dictionary)라는 데이터 타입이 객체에 해당한다.

ex)

var val1 = {};    // {}; 의 표현이 객체 생성이다.  []; 표현은 배열!

val1.val1 = 'ironmask';
val1.ironmask = 100;
val1['iromask2'] = 90;
==> Object {val1: "ironmask", ironmask: 100, ironmask2: 90}

==> val1['val1'] 은 "ironmask" 를 리턴
      val1['va'+'l1'] 과 같은 표현도 가능
      val.val1 과 같이도 사용 가능
===> 따라서, 'val1' 을 key라고 하고, 값을 value 로 부르는 경우가 많다.

한번에 값들을 정의하는 경우
// 이렇게 객체 내에 속성과 메소드를 그룹화해서 사용가능하므로, 이것이 JavaScript의 객체지향
var val1 = {
       'list' : {'ironmask' : 100, 'LG' : 90, 'Samsung' : 80}
      
'show' : function() {
                  alert("hello world");

        }

}

val1['show']();  // 함수는 이렇게 사용

* Tip 

for(var key in val1) {    // for in 문이라고 한다. (배열에서도 동일하게 사용 가능)
console.log(val1[key]);   // key를 순회하면서, key에 대응하는 값들을 찍어준다.
}

 

JavaScript의 함수!!

Posted by ironmask84
2015. 7. 21. 15:26 나는 프로그래머다!/HTML5


그 동안, C, JAVA가 주력 언어였고..
C++도 학부시절에 기본 A~Z 까지는 배웠기에,
어느정도 절차적, 객체지향에 대해 개념이 있다고 생각해왔습니다만..

이번에 HTML5 를 접하게 되면서, 학부 때 잠깐 접한 JavaScript를 공부 중인데,
아직 적응이 안되고 있는 중 임요....

기존 알고 지낸 프로그래밍 언어의 함수의 용도는 동일하나,
쓰임새가 너무 자유자재라..
정리를 위해 아래 몇몇 Case를 올립니다.
(출처 : https://opentutorials.org/module/532/6508  참조)

1. 변수 Case
1) function a(){}
2) a = {

b:function(){    <-- 객체내에('a'라는 객체) 있는 함수는 메소드라고 부른다.
}
};

2. 매개변수 Case

function cal(func, num){
return func(num)
}
function increase(num){
return num+1
}
function decrease(num){
return num-1
}
alert(cal(increase, 1));
alert(cal(decrease, 1));


3. 리턴 값 Case

function cal(mode){
var funcs = {
'plus' : function(left, right){return left + right},
'minus' : function(left, right){return left - right}
}
return funcs[mode];
}
alert(cal('plus')(2,1));
alert(cal('minus')(2,1));


4. 배열 Case

var process = [
function(input){ return input + 10;},
function(input){ return input * input;},
function(input){ return input / 2;}
];
var input = 1;
for(var i = 0; i < process.length; i++){
input = process[i](input);
}
alert(input);



 

JavaScript 재귀함수 예시

Posted by ironmask84
2015. 7. 20. 14:39 나는 프로그래머다!/HTML5



<!DOCTYPE html>
<html>
<body id="start">
<ul>
    <li><a href="./532">html</a></li>
    <li><a href="./533">css</a></li>
    <li><a href="./534">JavaScript</a>
        <ul>
            <li><a href="./535">JavaScript Core</a></li>
            <li><a href="./536">DOM</a></li>
            <li><a href="./537">BOM</a></li>
        </ul>
    </li>
</ul>
<script>
function traverse(target, callback){
    if(target.nodeType === 1){        // ===으로 사용하는 것 주의 nodeType이 1이면, Element Node 이다.
                                                 // (http://ironmask84.net/admin/entry/post/?id=214 참고)
        //if(target.nodeName === 'A')    // a 태그만 추출
        callback(target);
        var c = target.childNodes;
        for(var i=0; i<c.length; i++){
            traverse(c[i], callback);       // 재귀함수 호출
        }  
    }
}
traverse(document.getElementById('start'), function(elem){
    console.log(elem);
});
</script>
</body>
</html>