이 이벤트 핸들러를 jQuery 플러그인에 어떻게 바인딩합니까?

Siddharth

나는 JavaScript와 jQuery를 배우고 있기 때문에 이것이 어리석은 질문이라면 미리 사과드립니다.

(function ($) {
  $.fn.addDiv = function () {
    this.append('<div></div>');
    return this;
  };
}(jQuery));

$('div').click(function () {
  $('body').addDiv();
});

위의 코드 <div>에서 현재 값에 요소를 추가하는 간단한 jQuery 플러그인을 작성했습니다 this.

이제 요소를 클릭하고 몇 가지 <div>요소를 추가 한 후 클릭 처리기가 새로 추가 된 요소와 연결되지 않음을 알게되었습니다. 핸들러 함수가 바인드되었을 때 자연스럽게 존재하고 따라서 $('div')객체 에 존재했던 것들에게만 해당했기 때문에 이것은 완벽하게 수용 가능해 보입니다 .

이제 <div>플러그인 내의 모든 요소에 핸들러를 바인딩하는 것이 다음과 같이 간단 하다는 것을 알고 있습니다.

(function ($) {
  $.fn.addDiv = function () {
    this.append('<div></div>');
    $('div').click(function () {
      $('body').addDiv();
    }); // added this statement
    return this;
  };
}(jQuery));

그러나 이러한 이벤트 바인딩을 처리하는 더 좋은 방법이 있다고 확신합니다. 이것은 분명히 코드를 복제합니다. 그렇다면 플러그인 자체가 추가하는 요소에 대한 이러한 이벤트 바인딩과 관련하여 모범 사례는 무엇입니까?

이것은 교육적인 예입니다. 어떤 종류의 사용 사례로 간주하지 말고 대체 솔루션을 제공하십시오.

http://jsbin.com/jokururiyaca/1/edit

편집 : 일부 사람들은 사용을 권장 .selector하지만 jQuery 2에서는 더 이상 사용되지 않는다는 것을 알고 있습니다 . 또한이를 사용하면 이벤트 처리 코드가 플러그인 내에서 여전히 중복된다는 사실이 변경되지 않습니다.

알렉산더 오 마라

이것은 클릭 핸들러를 모든 요소에 다시 바인딩하는 문제를 해결할 수있는 한 가지 방법입니다.

를 사용하여 DOM 요소를 만들고을 사용하여 $('<div></div>')해당 요소에만 클릭 핸들러를 $('<div></div>').click(...)추가 한 다음을 사용하여 본문에 추가 할 수 $('<div></div>').click(...).appendTo("body")있습니다.

예:

(function ($) {
  $.fn.addDiv = function () {
    $('<div></div>').click(function () {
      $('body').addDiv();
    }).appendTo("body");
    return this;
  };
}(jQuery));

일반적으로 이벤트 위임 은 향후 요소에 대한 이벤트를 처리하는 데 사용됩니다.

예:

(function ($) {
  $.fn.addDiv = function () {
    this.append('<div></div>');
    return this;
  };
}(jQuery));

$(document).on("click", "div", function(){
  $('body').addDiv();
});

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

이벤트 핸들러에 인수를 어떻게 전달합니까?

분류에서Dev

Telerik MVC ClientTemplates에서 이벤트 핸들러를 어떻게 바인딩 할 수 있습니까?

분류에서Dev

JavaScript의 이벤트 핸들러에 올바른이 컨텍스트를 어떻게 제공하거나 바인딩합니까?

분류에서Dev

RactiveJS로 jQuery 이벤트 핸들러를 언제 (또는 어떻게) 설정합니까?

분류에서Dev

jQuery.bind로 생성 된 이벤트 핸들러를 어떻게 제거합니까?

분류에서Dev

이벤트 핸들러를 jQuery의 여러 요소 변수에 바인딩 하시겠습니까?

분류에서Dev

요소 제거 후 jquery 이벤트 핸들러는 어떻게됩니까?

분류에서Dev

jQuery 플러그인 이벤트 내에서 ReactiveVar를 어떻게 수정할 수 있습니까?

분류에서Dev

다른 핸들러에서 angularjs 이벤트 핸들러를 어떻게 트리거 할 수 있습니까?

분류에서Dev

이 이벤트 핸들러에서 반복적 인 코드를 피하려면 어떻게해야합니까?

분류에서Dev

객체와 함수를 jQuery '변경'이벤트 핸들러에 바인딩

분류에서Dev

핸들러 내부에서 이벤트 핸들러가 첨부 된 요소를 어떻게 얻습니까?

분류에서Dev

핸들러에 바인딩 된 jQuery 이벤트 제거

분류에서Dev

canvas.bind (event, handler)는 이벤트 핸들러에 이벤트를 어떻게 전달합니까?

분류에서Dev

VB 델리게이트를 파이썬 이벤트 핸들러로 어떻게 변환합니까?

분류에서Dev

jQuery에서 이벤트를 제거한 후 양식 제출에 바인딩 된 이벤트를 복원하려면 어떻게해야합니까?

분류에서Dev

Jquery .on () 함수가 PHP에 의해 동적으로 생성 된 요소와 이벤트 핸들러를 올바르게 바인딩하지 않습니다.

분류에서Dev

Jquery 이벤트 핸들러 ".on ()"

분류에서Dev

jquery 이벤트 핸들러에서 mvc 모델을 어떻게 동적으로 가져올 수 있습니까?

분류에서Dev

기존 이벤트 핸들러의 이름을 어떻게 변경합니까?

분류에서Dev

AppCenter SDK for C #에서 TrackError에 대한 이벤트 핸들러를 어떻게 등록합니까?

분류에서Dev

Node.js로 JavaScript 모듈 파일간에 이벤트 핸들러를 어떻게 사용합니까?

분류에서Dev

이 jQuery 플러그인에서 공용 함수를 어떻게 호출합니까?

분류에서Dev

jQuery 1.4를 사용하여 추가 클릭 이벤트를 하이퍼 링크에 바인딩하려면 어떻게해야합니까?

분류에서Dev

이 jquery 조각을 어떻게 바인딩 해제합니까?

분류에서Dev

이 JQuery 플러그인을 작동하려면 어떻게해야합니까?

분류에서Dev

두 개의 비동기 연결된 이벤트 핸들러를 어떻게 수신합니까?

분류에서Dev

core-animated-pages-transition-end 이벤트 핸들러를 어떻게 설정합니까?

분류에서Dev

core-animated-pages-transition-end 이벤트 핸들러를 어떻게 설정합니까?

Related 관련 기사

  1. 1

    이벤트 핸들러에 인수를 어떻게 전달합니까?

  2. 2

    Telerik MVC ClientTemplates에서 이벤트 핸들러를 어떻게 바인딩 할 수 있습니까?

  3. 3

    JavaScript의 이벤트 핸들러에 올바른이 컨텍스트를 어떻게 제공하거나 바인딩합니까?

  4. 4

    RactiveJS로 jQuery 이벤트 핸들러를 언제 (또는 어떻게) 설정합니까?

  5. 5

    jQuery.bind로 생성 된 이벤트 핸들러를 어떻게 제거합니까?

  6. 6

    이벤트 핸들러를 jQuery의 여러 요소 변수에 바인딩 하시겠습니까?

  7. 7

    요소 제거 후 jquery 이벤트 핸들러는 어떻게됩니까?

  8. 8

    jQuery 플러그인 이벤트 내에서 ReactiveVar를 어떻게 수정할 수 있습니까?

  9. 9

    다른 핸들러에서 angularjs 이벤트 핸들러를 어떻게 트리거 할 수 있습니까?

  10. 10

    이 이벤트 핸들러에서 반복적 인 코드를 피하려면 어떻게해야합니까?

  11. 11

    객체와 함수를 jQuery '변경'이벤트 핸들러에 바인딩

  12. 12

    핸들러 내부에서 이벤트 핸들러가 첨부 된 요소를 어떻게 얻습니까?

  13. 13

    핸들러에 바인딩 된 jQuery 이벤트 제거

  14. 14

    canvas.bind (event, handler)는 이벤트 핸들러에 이벤트를 어떻게 전달합니까?

  15. 15

    VB 델리게이트를 파이썬 이벤트 핸들러로 어떻게 변환합니까?

  16. 16

    jQuery에서 이벤트를 제거한 후 양식 제출에 바인딩 된 이벤트를 복원하려면 어떻게해야합니까?

  17. 17

    Jquery .on () 함수가 PHP에 의해 동적으로 생성 된 요소와 이벤트 핸들러를 올바르게 바인딩하지 않습니다.

  18. 18

    Jquery 이벤트 핸들러 ".on ()"

  19. 19

    jquery 이벤트 핸들러에서 mvc 모델을 어떻게 동적으로 가져올 수 있습니까?

  20. 20

    기존 이벤트 핸들러의 이름을 어떻게 변경합니까?

  21. 21

    AppCenter SDK for C #에서 TrackError에 대한 이벤트 핸들러를 어떻게 등록합니까?

  22. 22

    Node.js로 JavaScript 모듈 파일간에 이벤트 핸들러를 어떻게 사용합니까?

  23. 23

    이 jQuery 플러그인에서 공용 함수를 어떻게 호출합니까?

  24. 24

    jQuery 1.4를 사용하여 추가 클릭 이벤트를 하이퍼 링크에 바인딩하려면 어떻게해야합니까?

  25. 25

    이 jquery 조각을 어떻게 바인딩 해제합니까?

  26. 26

    이 JQuery 플러그인을 작동하려면 어떻게해야합니까?

  27. 27

    두 개의 비동기 연결된 이벤트 핸들러를 어떻게 수신합니까?

  28. 28

    core-animated-pages-transition-end 이벤트 핸들러를 어떻게 설정합니까?

  29. 29

    core-animated-pages-transition-end 이벤트 핸들러를 어떻게 설정합니까?

뜨겁다태그

보관