2012-06-21 2 views
3

나는 그들을 꽤 오랫동안 사용 해왔다. 그러나 대부분의 경우, 나는 더 짧은 것을 선호한다. 그러나 나는 단지 핵심적인 세부 사항을 정말로 파고 들기를 원한다. 나는 버그 코드를 만들고 있을지도 모른다. . t 기여하고 웹에서 느리게-완료 코드를 분산 할 그래서

을 말해 :

을 상당한 이점/그 (것)들의 사이에서 단점이있다거나, 그냥 아이스크림처럼 다른 무엇 맛은 같지만 "기분 좋은"효과?

누구나이 문제와 관련하여 전문가의 의견을 제시하는 것이 좋습니다.

미리 감사드립니다.

+2

의 중복 가능성 [jQuery를 :.. $()을 클릭 (FN) 대 $() 바인드 ('클릭 ', fn);] (http : // stackoverflow.com/questions/518762/jquery-clickfn-vs-bindclick-fn) (답변에서'on'에 대해서도 설명합니다) – Thilo

+1

가장 좋은 대답은 docs에 있습니다 : ['bind()'] (http : //api.jquery .com/bind /), ['click()'] (http://api.jquery.com/click/), ['on()'] (http://api.jquery.com/on/). – VisioN

+1

@ VisioN 문서는 사실 너무 길기 때문에 전문가의 정확한 정보를 얻기 위해 질문을 게시했습니다. –

답변

4

bind()을 1.0, live()을 1.3, delegate()을 1.4.2, on()을 1.7로 각각 첨가 하였다.

기준으로 1.7 on()을 사용하고 live()은 권장되지 않으며 권장되지 않습니다. 1.3을 사용하는 경우 live() 대신 bind()을 사용하고 1.4.2의 경우 live() 대신 대신에 delegate()을 사용하고 다른 1.7 대신 on()을 사용하십시오.

$("selector").click에 관해서. click()documentation에서 촬영 : 처음 두 변이

,이 방법은 ("클릭"핸들러)뿐만 아니라 CSTE 연구진 위해 (처리기를 "클릭")의 등 .bind 대한 지름길 jQuery 1.7. 세 번째 변형에서는 .click()이 인수없이 호출되면 .trigger ("click")의 바로 가기입니다.

다른 사람들 대신 on()을 사용하는 이유는 무엇입니까?
on()은 최신 추가 버전으로 jQuery 라이브러리에 1.7 버전으로 추가되었습니다. on()에는 이전 버전과 동일한 결과를 제공 할 수 있지만 개선되고 최적화 된 여러 가지 방법 서명이 있습니다. documentation에서 인용하자면 :

을 jQuery를 1.7로, CSTE 연구진() 메소드는 이벤트 핸들러를 연결하는 필요한 모든 기능을 제공합니다.

bind() 또는 delegate()을 더 이상 사용할 필요가없는 기본이 있습니다. 물론 작동 할 것이고 그러한 방법을 사용하는 데 아무런 해가되지 않아야합니다. 그러나 나는 항상 최신 추가 사항이 최적화되어 있고 이전 버전의 단점에 대해 개선되었다고 가정 할 것입니다 (설명서에 별도의 언급이없는 한 live()).
대신 on()을 사용하는 것이 좋습니다.

이유는 live()을 권장하지 않는 이유는 그 단점 때문입니다. live()documentation에서 인용하십시오. jQuery를 이후 버전이 단점이없는 더 나은 방법을 제공하기 때문에 .live() 메소드의

사용은 더 이상 권장되지 않습니다. 시간이 많이 소요에있을 수 있습니다

  • jQuery를이 .live() 메서드를 호출하기 전에 선택 로 지정된 요소를 검색하려고 : 특히, 다음과 같은 문제가 .live()의 사용으로 발생 큰 문서.
  • 연결 방법이 지원되지 않습니다. 예 : $ ("a"). find (".offsite, .external"). 라이브 (...); 유효하지 않으며 이 예상대로 작동하지 않습니다.
  • 모든 .live() 이벤트가 문서 요소에 첨부되므로 이벤트 은 처리되기 전에 가장 길고 가능한 가장 느린 경로를 사용합니다.
    1. : 모바일 아이폰 OS (아이폰, 아이 패드 및 아이팟 터치) 클릭 이벤트는 대부분의 요소에 대한 문서 본문에없는 거품을 수행하고 다음 해결 방법 중 하나를 적용하지 않고 .live()와 함께 사용할 수 없습니다에
    2. a 또는 버튼과 같은 기본적으로 클릭 할 수있는 요소를 사용하십시오.이 두 가지 모두로 인해 문서에 거품이 생깁니다.
    3. 모바일 iOS가 본문 내부에서 거품을 만들기 때문에 document.body의 레벨 아래에있는 요소 인 에 첨부 된 .on() 또는 .delegate()를 사용합니다.
    4. CSS 스타일 커서 적용 : 번의 클릭 (또는 document.documentElement를 포함한 상위)을 버블 링해야하는 요소에 대한 포인터. 그러나 에 복사하면 요소에 copy \ paste가 사용 중지되고 터치시 이 강조 표시됩니다.
  • 이벤트 핸들러에서 event.stopPropagation()을 호출하면 문서 아래쪽에 첨부 된 이벤트 핸들러를 중지 할 때 효과적이지 않습니다. 이벤트에 이미 이 전파되었습니다.
  • .live() 메소드는 일 수있는 방식으로 다른 이벤트 메소드와 상호 작용합니다. 예를 들어, $ (document) .unbind ("click")은 .live() 호출로 연결된 모든 클릭 핸들러를 제거합니다.

설명서에 더 많은 내용이 있습니다.

추가 자료
click()
bind()
live() (don't use)
delegate()
on()

+0

자, 당신은 나에게 매우 흥미로운 통찰력을주고 있습니다, 고마워요. –

+0

@DexterHuinda : 당신은 환영받을 만하다. 모든 jQuery 메서드 중 여러 바인딩 변형이 처음에는 혼란 스럽습니다. 그러나 앉아서 어떤 릴리즈가 추가되었는지 확인한 후에는 항상 최신 버전을 사용하기 시작했습니다. 'live()'는 jQuery 버전과 관계없이 항상 사용하지 말라고하는 이상한 것 같습니다. – Nope

+0

그래, 나는'live()'를 한 번도 사용한 적이 없으며 이름만으로는 실제로 어떤 용도로 사용되는지 혼란 스럽다. –

1

특별한 경우에 기능상의 차이는 없습니다. 그러나 .on이 jQuery 1.7부터 .bind 이상이고 .click은 일반 이벤트 처리기의 약식입니다.

+0

. 어떤 중요한 이유? –

+0

@DexterHuinda : 내 생각 엔이 바인딩은 jQuery 라이브러리에 추가되는 최신 메소드이므로 현재로서는 가장 최적화되어 있습니다. 그래도 추측. – Nope

+0

@DexterHuinda : 단서 없음. 그러나 나는 그것이 더 좋아 보이는 것을 발견한다, 개인적으로) – Ryan