jQuery 1.6/1.6.1에서 무었이 있었나?

  • .attr()에서 같이 하던 처리를 .attr()와 .prop()로 나누었다
  • 그래서 지금까지 움직였던게 움직이지않아 다시 수정하였다
지금까지 .attr()만으로 가능하던 처리를 버전1.6의 업데이트로 인하여 .attr()과 .prop()으로 나누어졌습니다. 버전업을 하면 그대로 움직이는 코드도있고 움직이지않는 코드가 있어 많은 혼란이 발생합니다.
많은 혼란으로 결국 버전업데이트 1.6.1에서 .attr()을 예전처럼 움직일수있도록 다시수정되었습니다.

왜 .attr()을 .prop()으로 나누었는가?

  • 원래 따로해야할 문제였다.
  • 같이 사용하는 문제로 버그가 많아져버렸다.
이건 jQuery개발자의 사정입니다.
원래JavaScript로서는  .attr()과 .prop()는 다른것입니다. 다른것이지만 jQuery에선는 차이를 숨기고(?) 같은것인것 처럼사용하고 있었습니다.
그러나 원래 다른것을 같은것처럼 사용할려고 하니 문제가 생겨 최근에는 그쪽 처리 부분에 버그가 많아 져버렸습니다. 그래서 버전1.6에선 [과감히 나누어 심플하게 하자!] 라고하는 생각한 것 같습니다.(상세하게 찾아보진않아서 내부 사정은 다를수도 있습니다.)
하지만「지금까지의 코드가 움직이지않아」 즉 호환성이 없는 문제로 많은 혼란을 낳게 되었습니다. 그리하여 .attr()의 처리를 수정하여 지금까지의 코드를 그대로 움직이게 버전 1.6.1로 업데이트를 하였습니다.(하지만 1.6.1도 불완전한것 같습니다.)

.attr()과 .prop()는 무었이 다른가?

  • .attr()는HTML의속성을 취급
  • .prop()는JavaScript프로파티을 취급
  • 양쪽은 같은 이름에서 다른게 있다.
이 두개의 메소드는 취급하는 정보가 다릅니다. .attr()는HTML의 속석(attribute)을、 .prop()는 JavaScript의 프로파티(property)를 취급하는 메소드입니다.
여기에서 혼란하기 십상인것이 속성과 프로파티는 「같지만 다른것」이라는 것입니다.
간단한 예로 링크의 URL입니다.

1<a id="to_comments" href="#comments">코멘트 일람</a>
아무것도 없는 페이지안의 점프 링크입니다. 여기 링크URL는 .attr()과 .prop()의 어느쪽이라도 취득할수있다(!)라고 생각할수도 있지만 사실 다릅니다.
1var $link = $('#to_comments');
2alert($link.attr('href'));  // href속성값을 표시
3alert($link.prop('href'));  // href프로파티의 값을 표시
그럼 무엇이 표시될까요?
  • .attr() → #to_comment
  • .prop() → http://example.com/path/to/page#to_comment
완전 다른결과가 나옵니다.……! Σ(°д°;)
사실은 「속성」이란것은 HTML으로서 기록되어있는 속성의 내용입니다. 물론 당신이 href="http://…"라고 적었을경우는 그대로 취득할수있습니다.
한편「프로파티」라고 하는 것은 JavaScript취급하는 하는 정보입니다. 이정보는 HTML에 기록되어있는 내용과 일치한다고는 할수없습니다.
하나더 예를 들어보겠습니다. 체크박스의 checked의 대하여 입니다.
1<checkbox id="private" type="checkbox" checked />
체크박스의 checked의 값을 확인합니다.
1var $checkbox = $('#private');
2alert($checkbox.attr('checked'));  // checked속성의 값을 표시
3alert($checkbox.prop('checked'));  // checked프로파티값을 표시
자 무엇이 표시될까요?
  • .attr() → "checked"
  • .prop() → true
이것도 결과가 다릅니다.
또 화면의 체크박스를 클릭하여 체크를 해제해보겠습니다.
  • .attr() → "checked"
  • .prop() → false
.attr()의 경우는 변하지않습니다. 체크가 되어있는지 판단을 할경우 .prop()을 사용할 필요가 있습니다.
어떻습니까? 예상할수있었나요?
※또 [checked속성의 값은 왜 checked라고하는 문자열이 될까?]라는 이야긴 HTML의 이야기가 되기때문에 하지않겠습니다. 간단히 설명하면 checkedselected같은 값이 없는 속성의 값은 속성의 이름과 같아집니다.

.attr()과 .prop()사용법은 어떻게 판단하면 좋을까?

음...감이네요... JavaScript에 익숙해지면 큰문제가 되지않을거라고 생각합니다.
간단하게 말해서 HTML에 쓴 속성의 값을 취급하고 싶을경우는 .attr()을 이외의 JavaScript의것을 할경우는 .prop()을 사용하면 어떨까요?

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 실제 프로젝트에서 jQuery를 적용중입니다. 기존 순수 Javascript를 사용할 때 보다 코드 양이 많이 줄어드는 것 때문에 저는 jQuery를 선호하는 편입니다. 그런데 1.4를 쓰다가 1.6대로 변경된 적이 있는데 이상하게 적용이 안되는 부분이 있었습니다.
  checkbox의 상태를 변경하거나 읽어올 때 '.attr()'함수를 이용했었는데 어느 순간부터인가 적용이 잘 안되었습니다. 단순 오류라고 생각하고
jObject[0].checked = "checked";
이렇게 javascript 객체로 변경해서 진행했습니다. (적용이 안되니 어떻게든 되게 해야져 ^^;;)
그런데 우연한 구글신과의 만남중에 정말로 우연히 1.6에서 변화가 있었다는 것을 알게되었습니다. 사용하고 있던 api가 이렇게 변경될 줄이야!!
기존의 attr()로 처리되었던 것을 attr()과 prop()로 분리되어 처리되게 되었습니다.

다음은 .attr()과 .prop()사용에 관한 구분입니다. 

(출처:서디의 다락방:jQuery 1.6.1 릴리즈, 성능 , 버그 픽스 내용

Attribute/Property

.attr()

.prop()

accesskey

align

async

autofocus

checked

class

contenteditable

defaultValue


draggable

href

id

label

location *

multiple

nodeName


nodeType


readOnly

rel

selected

selectedIndex


src

style

tabindex

tagName


title

type

width **

저작자 표시



'jQuery' 카테고리의 다른 글

SelectBox 제어  (0) 2014.02.26
e.preventDefault()  (0) 2014.02.26
제이쿼리 셀렉터 요약  (0) 2014.02.04
jQuery select box 제어  (0) 2014.02.04
4.jQuery Events  (0) 2013.12.08

(1) Javascript 문법 스타일

기존의 프로그래밍 언어의 엄격한 문법 스타일에 적용되어 있는 사용자라면 분명히 자바스크립트의 자유 분방한 문법 스타일을 보고 적지않게 당황한적이 있을 것이다. 이러한 스타일은 단점이 될 수도 있으나 매우 유연하기 때문에 때에 따라서 매우 강력한 기능을 발휘한다. 그렇다면 가장 많이 사용되는 자바스크립트의 함수와 관련된 문법 스타일에 대해서 알아보도록 하자.

1. 함수를 변수에 설정할 수 있다.

1
2
3
var func = function() {
     alert("안녕");
};



2. 변수에 설정한 함수를 매개 변수로 사용하여 호출 할 수 있다.

1
showAlert(func);



3. 위와 같이 변수에 담지 않고 바로 함수를 매개 변수로 바로 설정 할 수 있다.

1
2
3
4
5
6
showAlert(function() {
     alert("안녕");
});

// 아래와 같이 한 줄로 사용하는 경우도 있다.
showAlert(function() { alert("안녕"); });



3번의 경우 조금 어렵게 생각할 수도 있는데 자세히 보면 그냥 함수 파라메터 값에 변수가 아닌 함수 그 자체가 들어가 있다고 간단하게 생각하면 된다. 이러한 표현식은 jQuery에서 상당히 많이 쓰이기 때문에 이러한 문법 스타일에 최대한 빨리 익숙해져야 한다.


(2) 셀렉터 요약 정리

셀렉터는 jQuery의 가장 강력한 기능이다. 간단하게 설명을 하자면, HTML 문서 안에는 다양한 엘리먼트들이 포함되어 있는데, 이를 컨트롤하기란 결코 간단한 일이 아니다. 일반적으로 자바스크립트에서 엘리먼트를 얻기 위해 많이 쓰이는 방법은document.getElementById("엘리먼트 ID 속성 값") 함수를 사용하면 되지만, 일단 소스 코드가 길어지고 얻을 수 있는 엘리먼트들도 매우 한정적이다.

하지만 jQuery에서는 $("셀렉터 문법") 함수를 사용하여 매우 간단하고 다양한 스타일의 엘리먼트들을 쉽게 얻을 수 있다. 셀렉터로 얻은 엘리먼트들을 확장 집합이라 하는데, 특수한 배열 형태의 객체로 반환이 된다. 이렇게 반환된 객체들은 jQuery가 지원하는 매우 다양한 함수들을 사용할 수 있다.

아래 표에 나와 있는 자식/에트리뷰트/컨테이너 셀렉터는 가장 많이 사용되는 셀렉터 문법이다.

셀렉터 문법
문법 설명
*
모든 엘리먼트
E
태그 명이 E인 모든 엘리먼트
E F
E의 자손이면서 태그명이 F인 모든 엘리먼트
E>F
E의 바로 아래 자식이면서 태그 명이 F인 모든 엘리먼트
E+F
E의 형제 엘리먼트로 바로 다음에 오는 엘리먼트 F
E~F
E의 형제 엘리먼트로 다음에 나오는 모든 엘리먼트 F
E:has(F)
태그 명이 F인 자손을 하나 이상 가지는 태그 명이 E인 모든 엘리먼트
E.C
클래스 명 C를 가지는 태그 명이 E인 모든 엘리먼트. E의 생략은 *.C와 동일함
E#I
아이디가 I인 태그 명이 E인 엘리먼트. E의 생략은 *#I와 동일
E[A=V]
값이 V인 에트리뷰트 A를 가지는 태그 명이 E인 엘리먼트
E[A=V]
값이 V로 시작하는 에트리뷰트 A를 가지는 태그 명이 E인 엘리먼트
E[A$=V]
값이 V로 끝나는 에트리뷰트 A를 가지는 태그 명이 E인 엘리먼트
E[A*=V]
값이 V를 포함하는 에트리뷰트 A를 가지는 태그 명이 E인 엘리먼트
E[A]
에트리뷰트 A를 가지는 태그 명이 E인 모든 엘리먼트
[자식/에트리뷰트/컨테이너 셀렉터]


아래 표는 jQuery가 지원하는 고급 위치 기반 셀렉터이며, DOM에서 위치를 기반으로 엘리먼트를 선택하며 첫 번째 링크나 홀수 번째, 짝수 번째와 같이 엘리먼트의 위치나 다른 엘리먼트와 관계를 기반으로 엘리먼트를 선택해야 하는 경우에 사용하면 된다.

셀렉터 문법
문법 설명
E:first
모든 엘리먼트 E 중에서 첫 번째인 엘리먼트
E:last
모든 엘리먼트 E 중에서 마지막인 엘리먼트
E:first-child
엘리먼트 E의 자식 엘리먼트 중에서 첫 번째인 엘리먼트
E:last-child
엘리먼트 E의 자식 엘리먼트 중에서 마지막인 엘리먼트
E:only-child
엘리먼트 E의 자식 엘리먼트 중에서 형제가 없는 엘리먼트
E:nth-child(n)
엘리먼트 E의 n번째 자식 엘리먼트
E:nth-child(even or odd)
엘리먼트 E의 홀수 or 짝수 자식 엘리먼트
E:even or E:odd
페이지 전체의 짝수 or 홀수 엘리먼트
E:eq(n)
태그 값이 E인 모든 엘리먼트 중에서 n번째로 일치하는 엘리먼트
E:gt(n)
태그 값이 E인 모든 엘리먼트 중에서 n번째 엘리먼트(포함 X) 이후의 엘리먼트
E:lt(n)
태그 값이 E인 모든 엘리먼트 중에서 n번째 엘리먼트 이전의 엘리먼트
[위치 셀렉터]


CSS 명세만으로는 표현할 수 없는 특성이 있는 엘리먼트를 선택해야 하는 경우 아래 표에 나와 있는 셀렉터를 사용하면 된다.

셀렉터 문법
문법 설명
:animated
현재 애니매이션이 적용되고 있는 엘리먼트 선택
:button
모든 버튼 선택
:checkbox
체크 박스 엘리먼트만 선택 (input[type=checkbox])
:checked
선택된 체크 박스나 라디오 버튼만을 선택
:contains(foo)
텍스트 foo를 포함하는 엘리먼트만 선택
:disabled
인터페이스에서 비활성화 상태인 모든 폼 엘리먼트를 선택
:enabled
인터페이스에서 활성화 상태인 모든 폼 엘리먼트를 선택
:file
모든 파일 엘리먼트를 선택 (input[type=file])
:header
헤더 엘리먼트 선택 (<h1>~<h6>)
:hidden
감춰진 엘리먼트만 선택
:image
폼 이미지만 선택 (input[type=image])
:input
폼 엘리먼트만 선택 (input, select, textarea, button)
:not(filter)
필터의 값을 반대로 변경함.
:parent
빈 엘리먼트를 제외하고, 텍스트도 포함해서 자식 엘리먼트를 가지는 엘리먼트
:password
패스워드 엘리먼트 선택 (input[type=password])
:radio
라디오 엘리먼트 선택 (input[type=radio])
:reset
리셋 버튼을 선택 (input[type=reset] or button[type=reset])
:selected
선택된 엘리먼트만 선택
:submit
전송 버튼을 선택 (input[type=submit] or button[type=submit])
:text
텍스트 엘리먼트만 선택 (input[type=text])
:visible
보이는 엘리먼트만 선택 
[jquery 정의 셀렉터]



(3) 자주 사용되는 함수 정리

$.유틸리티 함수, Event 관련 함수, Ajax 관련 함수는 이번 장에서 다루지 않을 것이다.


 
함수 명
함수 설명
엘리먼트 조작
each(Function)
선택된 엘리먼트가 다수일 경우에 each 함수를 사용하여 차례대로 엘리먼트를 선택한다.
에트리뷰트 조작
attr(name, value)
선택된 엘리먼트의 name 에트리뷰트의 값을 value로 설정
 
attr(name)
선택된 엘리먼트의 name 에트리뷰트의 값을 얻어옴.
 
attr(Attributes)
선택된 엘리먼트를 프로퍼티(json)형태로 설정할 수 있음
 
val()
엘리먼트의 value 에트리뷰트 값을 얻어옴. attr("value")와 동일함.
 
val(content)
엘리먼트의 value 에트리뷰트 값을 content로 설정함.
에트리뷰트 제거
removeAttr(name)
해당 어트리뷰트의 값이 초기화 된다.
스타일 변경
addClass(names)
선택된 엘리먼트에 CSS Class를 적용함. 만약에 다수의 Class를 적용하려면 공백으로 구분하여 할당하면 됨.
 
removeClass(names)
선택된 엘리먼트들을 제거함.
 
toggleClass(names)
특정 Class를 적용하지 않은 상태면 적용하고, 적용한 상태면 제거함.
스타일 얻고 설정
css(name, value)
선택된 엘리먼트의 name 에트리뷰트 값을 value로 설정함.
 
css(properties)
{"name1:" value1", "name2": "value2", } 와 같은 형태로 설정함.
 
css(name)
특정 name의 프로퍼티의 스타일 값을 얻을 수 있음.
 
width(value)
선택된 엘리먼트의 width 값을 설정함.
 
height(value)
선택된 엘리먼트의 height 값을 설정함.
 
width()
선택된 엘리먼트의 width 값을 얻어옴.
 
height()
선택된 엘리먼트의 height 값을 얻어옴.
 
offset()
선택된 엘리먼트의 left 값과 top 값을 E.offset().leftE.offset().top과 같은 방법으로 얻을 수 있음.
엘리먼트 내용 설정
html()
선택된 엘리먼트 태그 내용을 얻을 수 있음.
 
html(content)
선택된 엘리먼트의 태그 내용을 content로 설정함.
 
text()
선택된 엘리먼트의 태그 내용 중 텍스트 값만 얻을 수 있음.
 
text(content)
선택된 엘리먼트의 태그 내용을 content로 설정함.
엘리먼트 복사&이동
append(content)
선택된 엘리먼트의 내용 마지막에 새로운 content를 추가함.
 
appendTo(target)
선택된 엘리먼트가 단일이면 target으로 이동시키고 다수라면 복사됨.
 
prepend(content)
append와 달리 앞으로 추가함
 
prependTo(target)
appendTo와 달리 앞으로 복사 또는 이동함
 
before(),
insertBefore()
엘리먼트를 대상의 첫 번째 자식으로 삽입하는 대신에 대상의 바로 앞 형제로 추가함.
 
after(),
insertAfter()
엘리먼트를 대상의 마지막 자식으로 삽입하는 대신에 대상의 바로 뒤 형제로 추가함
엘리먼트 감싸기
wrap(wrapper)
매개 변수로는 String과 엘리먼트 타입이 올 수 있으며, "<div class='hello'></div>" 형태로 매개 변수 값을 넘기면 됨.
 
wrapAll(wrapper)
선택된 모든 엘리먼트를 wrapper로 감쌈
엘리먼트 제거
remove()
페이지 DOM에서 확장 집합의 모든 엘리먼트를 삭제함.
 
empty()
일치하는 집합의 모든 엘리먼트의 Content를 제거함.
엘리먼트 복사
clone(copyHandlers)
일반적으로 엘리먼트를 복사한 확장 집합을 만들면 이들은 DOM 어딘가에 덧붙일 수 있음
[함수 정리 (1)]



(4) 그 밖에 함수 정리

아래 표에 정리된 함수들은 확장된 엘리먼트 집합을 관리하는 함수들이다.

 
함수 명
함수 설명
확장 집합 크기 얻기
size()
해당 엘리먼트의 개수를 반환한다.
확장 집합에서 특정 엘리먼트 얻기
get(index)
확장 집합에서 index번째의 엘리먼트를 가져온다. (배열과 유사함)
 
get()
모든 확장 엘리먼트를 일반 자바스크립트 배열로 얻는다.
 
index(element)
확장 집합에서 특정 엘리먼트의 index 값을 가져온다.
확장 집합 재편성 하기
add(element)
기존의 확장 집합에 다른 엘리먼트를 추가한다.
 
not(expression)
기존의 확장 집합에서 expression와 일치하는 엘리먼트를 제외시킨다.
 
filter(expression)
기존의 확장 집합에서 expression와 일치하는 엘리먼트만 가져온다.
확장 집합의 부분 집합 얻기
slice(begin, end)
기존의 확장 집합에서 begin번째부터 end번째까지의 엘리먼트만 가져온다.
확장 집합 관련 그 밖에 함수들
find(selector)
기존의 확장 집합에서 selector와 일치하는 엘리먼트들로 새로운 확장 집합을 생성한다.
 
is(selector)
기존의 확장 집합에서 selector와 일치하는 엘리먼트가 있다면 true, 없다면 false를 반환한다.
jQuery 체인 관리하기
end()
이전 확장 집합을 반환한다.
 
andSelf()
커맨드 체인에서 이전 확장 집합 두 개를 하나로 합친다
관계를 이용하여 확장 집합 얻기
 
아래 표 참조.
[함수 정리 (2)]


 

함수 명
설명
children()
확장 엘리먼트의 고유한 자식으로 구성된 확장 집합 반환한다.
contents()
엘리먼트의 콘텐츠로 구성된 확장 집합을 반환한다.
next()
확장 집합 내의 각 확장 엘리먼트 바로 다음에 나오는 형제로 구성된 확장 집합을 반환한다.
nextAll()
확장 집합 내의 각 확장 엘리먼트 바로 다음에 나오는 모든 형제로 구성된 확장 집합을 반환한다.
parent()
바로 위 부모로 구성된 확장 집합을 반환한다.
parents()
바로 위 부모와 모든 조상이 포함하는 확장 집합을 반환한다.
prev()
바로 이전에 나오는 형제로 구성된 확장 집합을 반환한다.
prevAll()
이전에 나오는 모든 형제로 구성된 확장 집합을 반환한다.
siblings()
확장 엘리먼트 내에 모든 형제를 포함한 확장 집합을 반환한다.
[관계를 이용하여 확장 집합 얻기와 관련된 함수 정리]


'jQuery' 카테고리의 다른 글

e.preventDefault()  (0) 2014.02.26
.attr() .prop() 왜 나누어졌는가  (0) 2014.02.04
jQuery select box 제어  (0) 2014.02.04
4.jQuery Events  (0) 2013.12.08
3.jQuery Manipulation  (0) 2013.12.07


// select box ID로 접근하여 선택된 값 읽기

$("#셀렉트박스ID option:selected").val();

 

// select box Name로 접근하여 선택된 값 읽기

$("select[name=셀렉트박스name]").val();

 

// 같은 방식으로 span과 같은 다른 태그도 접근 가능하다~

$("span[name=셀렉트박스name]").text();

 

// 선택된 값의 index를 불러오기

var index = $("#셀렉트박스ID option").index($("#셀렉트박스ID option:selected"));

 

// 셀렉트 박스에 option값 추가하기

$("#셀렉트박스ID").append("<option value='1'>1번</option>");

 

// 셀렉트 박스 option의 맨앞에 추가 할 경우

$("#셀렉트박스ID").prepend("<option value='0'>0번</option>");

 

// 셀렉트 박스의 html 전체를 변경할 경우

$("#셀렉트박스ID").html("<option value='1'>1차</option><option value='2'>2차</option>");

 

// 셀렉트 박스의 index별로 replace를 할 경우

// 해당 객체를 가져오게 되면, option이 다수가 되므로 배열 객체가 되어 eq에 index를 넣어 개별 개체를 선택할 수 있다.

$("#셀렉트박스ID option:eq(1)").replaceWith("<option value='1'>1차</option>");

 

// 직접 index 값을 주어 selected 속성 주기

$("#셀렉트ID option:eq(1)").attr("selected", "selected");

 

// text 값으로 selected 속성 주기

$("#셀렉트ID")val("1번").attr("selected", "selected");

 

// value 값으로 selected 속성 주기

$("#셀렉트ID").val("1");

 

// 해당 index item 삭제하기

$("#셀렉트ID option:eq(0)").remove();

 

// 첫번째, 마지막 item 삭제하기

$("#셀렉트ID option:first").remove();

$("#셀렉트ID option:last").remove();

 

// 선택된 옵션의 text, value 구하기

$("#셀렉트ID option:selected").text();

$("#셀렉트ID option:selected").val();

 

// 선택된 옵션의 index 구하기

$("#셀렉트ID option").index($("#셀렉트ID option:selected"));

 

// 셀렉트박스의 아이템 갯수 구하기

$("#셀렉트ID option").size();

 

// 선택된 옵션 전까지의 item 갯수 구하기

$("#셀렉트ID option:selected").prevAll().size();

 

// 선택된 옵션 후의 item 갯수 구하기

$("#셀렉트ID option:selected").nextAll().size();

 

 // 해당 index item 이후에 option item 추가 하기

$("#셀렉트ID option:eq(0)").after("<option value='3'>3번</option>");

 

// 해당 index item 전에 option item 추가하기

$("#셀렉트ID option:eq(3)").before("<option value='2'>2번</option>");

 

// 해당 셀렉트 박스에 change event binding 하기

 

$("#selectID").change(function() {

alert($(this).val());

alert($(this).children("option:selected").text());

});

 

[출처] jQuery select box 제어|작성자 냐앙


'jQuery' 카테고리의 다른 글

.attr() .prop() 왜 나누어졌는가  (0) 2014.02.04
제이쿼리 셀렉터 요약  (0) 2014.02.04
4.jQuery Events  (0) 2013.12.08
3.jQuery Manipulation  (0) 2013.12.07
2.jQuery CSS  (0) 2013.12.06

[jQuery] Events

 

 

[Browser Event]

 

● .error() : 선택된 개체(images, window, document...)가 정확하게 로드되지 않을 경우 발생하는 오류 이벤트.

 - .bind("error",handler) 의 축약형.

 

● .resize() : browser window의 사이즈가 변경될때 발생하는 이벤트

 - .bind("resize", hadler)의 축약형.

 - .trigger("resize") 를 통하여 이벤트를 발생시킬수 있다.

 

● .scroll()  : 선택된 element의 스크롤바가 움직일경우 발생하는 이벤트

 - .bind("scroll", handler)의 축약형

 - .trigger("scroll")을 통하여 이벤트를 발생 시킬수 있다.

 

 

[Document Loading]

 

● .load()   : 선택된 element (URL: images, scripts,frames,iframes,window Object..등등(개별적)) 가 로드 완료 되었을때 발생하는 이벤트

 - .bind("load", handler)의 축약형

 

● .ready()   : DOM이 준비된(완전히 로드된) 이후 발생하는 이벤트

 - javascript <body onload=" "> 와 .ready() 는 양립할수 없으면 둘중 하나만 사용해야된다.

 - jQuery의 $(window).load() 함수에서 attach 해서 사용한다.

 

● .unload()  : 페이지가 unload될때 발생하는 이벤트 (브라우저별 다르게 동작할수 있다.)

 - $(window).unload( function (){ alert("Bye Now!"); });

 

 

[Event Handler Attachment]

 

● .bind() : 선택된 element에 이벤트 핸들러를 붙인다. (요소와 이벤트를 연결한다는 주목적을 생각하면 된다.)

- blur, focus, focusin, focusout, load, resize, scroll, unload, click, dbclick

- mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave

- change, select, submit, keydown, keypress, keyup, error

 

//기본                                                                //다중 이벤트

$('#foo').bind('click', function() {                       $('#foo').bind('mouseenter mouseleave', function() {
 alert('User clicked on "foo."');                                 $(this).toggleClass('entered');
});                                                                       });

//map

$("div.test").bind({
  click: function(){
    $(this).addClass("active");
  },
  mouseenter: function(){
    $(this).addClass("inside");
  },
  mouseleave: function(){
    $(this).removeClass("inside");
  }
});


● .unbind()   : 선택된 element의 선언된 이벤트 핸들러를 제거한다.

- $('#foo').unbind();    //선택된 element의 모든 이벤트 제거.

- $('#foo').unbind('click');    // click 이벤트를 제거

- $('#foo').unbind('click',fucntion(){    // 이벤트를 제거하면서 함수 실행.

alert('The quick brown fox jumps over the lazy dog.');

   });

 

● one()   : bind() 함수처럼 선택된 element 에 이벤트 핸들러를 붙인다.

- 하지만 딱 한번의 이벤트만 발생시킨다.

- 즉, bind() 함수의 이벤트핸들러 안에서 unbind() 하는것과 같다고 보면 된다.

$("#foo").one("click", function(){      ==    $("#foo").bind("click", function(event){

alert("only once");                                    alert("only once");

});                                                                   $(this).unbind(event);

};

 

※ 바인드형 함수 _ 추가되는 요소에도 이벤트 적용할시

$(elements).on(events, selector, data, handler);        // jQuery 1.7+

$(elements).delegate(selector, events, data, handler);  // jQuery 1.4.3+

$(elements).live(eventType, eventData, handler);  // jQuery 1.4+

 

● .on()     :   .on() 함수는 jQuery 객체 안의 현재 선택된 요소 집합과 이벤트 핸들러를 묶어 줍니다 (* 추가될 element의 이벤트 핸들러도 적용된다.)

 

// p 태그를 클릭하면 알림창이 나타납니다.

$("p").on("click", function(){ alert( $(this).text() ); });

 

// 이벤트 핸들러에 데이터를 전달하고, foo 값을 알림창으로 보여줍니다.

function myHandler(event) { alert(event.data.foo); }
$("p").on("click", {foo: "bar"}, myHandler)

 

폼의 submit를 막고 false를 인자로 하여 이벤트가 버블링되는 것을 차단합니다.

$("form").on("submit", false)

 

.preventDefault() 함수로 기본적인 액션을 취소시킵니다.

$("form").on("submit", function(event) {  event.preventDefault(); });

 

.stopPropagation()를 사용하여 폼 submit을 방해하지 않고 버블링에 의한 submit을 방지합니다..

$("form").on("submit", function(event) {   event.stopPropagation(); });

 

 

● .delegate()   : 선택된 element의 selector 에 이벤트 핸들러를 붙인다. (* 추가될 element의 이벤트 핸들러도 적용된다.)

    live() 함수 보완하여 만들어진 함수.

 

 $("body").delegate("p", "click", function(){
      $(this).after("<p>Another paragraph!</p>");
    });  

 // 함수는 새로 추가된 p에도 자동적용됨. 새로 만들어진 애들 클릭해도 또 추가.

     (delegate('p'....)에서 p에 click 이벤트를 적용)

 

 

● .undelegate()   : 선택된 element의 이벤트 핸들러를 제거한다.

 

.undelegate() //모든이벤트 제거

 

$("body").undelegate("p","click");

 

$("body").undelegate("p","click",function(){ alert("");});

 

● .live() : 선택된 이벤트 핸드러를 바인드 한다.

.live(eventType, handler)              Ver 1.3

$("p").live("click", functin(){alert($(this).text());});

$("p").live("click", functin(){ return false; }); //버블링 방지

$("p").live("click", functin(event){ event.preventDefault(); }); //기본동작 취소

 

.live(eventType, eventData, handler)            Ver 1.4

$("a").live("click",{foo:bar},function(event){alert{event.data.foo);});

 

● .die() :  선택된 이벤트 핸들러중 live()함수에 의해 바인드된 이벤트 핸들러를 제거한다.

$("p").die();    // 모든 live이벤트 바인드 제거

$("#theone").die("click")  // #theone 요소의 live 이벤트 -  click바인드를 제거한다. 

$("#theone").die("click", function(){...실행할함수..});  //die 실행 함수호출.

 

● .jQuery.proxy()  : 컨텍스트의 이벤트 핸들러를 리턴한다.

  http://api.jquery.com/jQuery.proxy/

 

 

● .trigger()   : 선택된 element의 이벤트를 발생시킨다.

 

.trigger( eventType, extraParameters)

$("#foo").bind("click", function(){ alert("$(this).text") });

$("#foo").trigger("click");

 

//custom 이벤트 트리거

      $("#foo").bind("custom", function(event, param1, param2){

alert(param1 + "\n" + param2);

});

$("#foo").trigger("custom",['custom', 'event']);

 

//

var event = jQuery.Event("logged");

event.user = "foo";

event.pass = "bar";

$("body").trigger(event);

 

● .triggerHandler  : - form submission 에는 동작하지 않는다.

 - 선택된 element중 가장 첫번째 element만 영향을 미친다.

 - 브라우저의 기본동작(default action), 버블링, live events는 일어나지 않음.

  (단순히 handler 메서드를 호출)

 

 

[Event Object]

이벤트 핸들러( function(event))의 파라메터로 사용된다.

- var e = jQuery.Event("click");

// http://api.jquery.com/category/events/event-object/

맴버   :  event.currentTarget

event.data

event.isDefaultPrevented()

event.isImmediatePropagationStopped()

event.pageX

event.pageY

event.preventDefault

event.relatedTarget

event.result

event.stopImmediatePropagation()

event.stopPropagation()

event.target

event.timeStamp

event.type

event.which

 

 

[Form Events]

 

 

 예) .focus(handler(eventObject))

$(select).focus( function(alert("focused");));

.focus() ==  trigger("focus")

 

● .focus()    :    form컨트롤의 포커스가 생겼을때 발생되는 이벤트

● .blur()    :    form 컨트롤의 포커스를 잃어버림 (<!=> focus())

● .change()    :   선택박스,텍스트박스,체크박스,라디오버튼 등의 입력값 , 선택값 변경 이벤트

● .select()    :    <input type = text /> ,<textarea> 에만 사용된다 :  텍스트가 선택될때 발생되는 이벤트

-* 텍스트 Drag시 발생되는 이벤트(scroll 이벤트)

-또한 스크롤이 가능한 프레임이나 overflow CSS 속성이 있는 요소의 scroll (또는 auto 속성) 에서도 발생합니다..

-셀렉트 박스와 혼동하지 말것.

● .submit    :    <form> 요소에만 사용된다.

 

<form id="target" action="destination.html">
  <input type="text" value="Hello there" />
  <input type="submit" value="Go" />
</form>


<div id="other">
      Trigger the handler
</div>

 

$('#target').submit(function() {
  alert('Handler for .submit() called.');
  return false;
});

// 수동 호출

$('#other').click(function() {
  $('#target').submit();
});

 

[Keyboard Events]

 

● .focusin()    :    선택된 element 또는 그 자식 element에 포커스가 생겼을때 발생되는 이벤트

● .focusout()    :    선택된 element 또는 그 자식 element에 포커스를 잃었을때 발생되는 이벤트

 

● .keydown()    :    선택된 elememt 가 포커스 되어있고 키보드를 누르고 있을때 발생되는 이벤트

● .keyup()    :    선택된 elememt 가 포커스 되어있고 키보드를 누른 키보드를 띌 때 발생되는 이벤트

● .keypress()    :    선택된 elememt 가 포커스 되어있고 키보드를 눌렀을때 발생되는 이벤트

* 실제 키보드 사용시 발생되는 이벤트 순서 down or press -> up

 

[Mouse Events]

 

● .click    :    선택된 이벤트 클릭했을때 발생하는 이벤트

● .dbclick    :    선택된 이벤트 더블 클릭했을때 발생하는 이벤트

 

● .hover()    :    선택된 element에 마우스가 올라갔을때와 밖으로 나왔을때 발생되는 이벤트. (mouseEnter, mouseLeave)

 

● .mouseover()    :    선택된 element에 마우스 포인터가 올려졌을때 발생되는 이벤트 ( 버블링 발생)
● .mouseout() :  선택된 element에서 마우스가 빠져나왔을때 발생되는 이벤트 ( 버블링 발생)

-개선 (IE에서만 제공되는 mouseenter 자바스크립트 이벤트를 다른브라우저의 호환성을 위해 만들어짐)
● .mouseenter() : 선택된 element에 마우스포인터가 올려졌을때 발생되는 이벤트 
● .mouseleave() : 선택된 element에 마우스 포인터가 빠져 나왔을때 발생되는 이벤트

● .mousemove() : 선택된 element에 마우스 포인터가 움직일때 발생되는 이벤트
● .mousedown() : 선택된 element에 마우스 포인터가 올려져있고 마우스 버튼을 누를때 발생되는 이벤트
● .mouseup() : 선택된 element에 마우스 포인터가 올려져있고 마우스 버튼을 누른상태에서 띌때 발생되는 이벤트

● .toggle() : 선택된 element에 마우스 포인터가 올려져있고 마우스 버튼을 누른상태에서 띌때 발생되는 이벤트
 $("#target").toggle(function(){
  alert("first handler for.toggle() called");
 }, function(){
  alert("second handler for.toggle() called");
 });

 

 

 

'jQuery' 카테고리의 다른 글

제이쿼리 셀렉터 요약  (0) 2014.02.04
jQuery select box 제어  (0) 2014.02.04
3.jQuery Manipulation  (0) 2013.12.07
2.jQuery CSS  (0) 2013.12.06
1.jQuery Core [선택자]  (0) 2013.12.05

+ Recent posts