2011-09-30 1 views
5

jQuery 1.6에서 이벤트 위임을 사용하면 공통 상위 항목으로 버블 링 한 이벤트에 응답 할 수 있습니다.jquery 이벤트 위임 연속 호출이 가능한 변수 범위

샘플 구현은 다음과 같다 : 당신이 많은 이벤트가 한 페이지에 바인딩 갖고 싶어 트리거가있을 때 구조의

(function($){ 
    $.fn.myeventhandler = function() { 

    return this.delegate('a.next, a.prev', 'click customEvent', function (event) { 

     var target=$(event.target); 
     var bar = null; 

     if('click' == event.type) {    /*~[ call this 'a' ]~*/ 

      // handle the click event 
      $('#next-element').animate({width:'200px'},1300,function(){ 
      bar = 'value1'; 
      $('#next-element').animate({width:'100px'},1300,function(){ 
       bar = 'value2'; 
       console.log(bar); 
      }); 
      }); 

     } else if('customEvent' == event.type) { /*~[ call this 'b' ]~*/ 

      // handle the customEvent event 
      $('#my-element').animate({height:'200px'},1300,function(){ 
      bar = 'my-event1'; 
      console.log(bar); 
      }); 

     } 

     return false; 
    }); 
    } 
})(jQuery); 

이 종류는 정말 잘 작동 할 수 있습니다. 그러나 나는 호기심이 많은 행동을 발견하고 누군가 다음과 같은 범위에서 나를 계몽 할 수 있는지 궁금해했습니다.

'a'앞에 변수 'var bar;'을 정의하고 'a'와 'a' 실행에 시간이 오래 걸리는 경우 '클릭'이 두 번째로 트리거되면 '막대'변수에 값이 재 할당되거나 새 값이 생성됩니까?

질문의 이유는 애니메이션을 완료하는 데 1.3 초가 걸리는 '미완성'애니메이션이 있다는 것입니다. 연속 된 두 번의 클릭 이벤트를 발생 시키면 대상 및 유형이 올바르게 설정되지만 두 번째 애니메이션이 첫 번째 애니메이션에 영향을 미치는 것처럼 보이고 두 개의 유효 범위가 서로 사용할 수있는 것처럼 보입니다.

아직 애니메이션이 끝나지 않아 jsFiddle에서 온라인으로 작업 할 준비가되지 않았지만 여기에 범위에 대한 엄지 손가락 규칙이 있습니다. 조사해야하거나 사용할 수있는 범위에 대한 명확한 설명이 있어야합니다. 누군가 찾은 적이 있습니까?

편집 : 위의에서 , 나는 내가 사용하고있는 것과 유사한 상황에서 추가했습니다. 위의 단순화 된 경우, 'bar'의 값은 여전히 ​​2 회의 연속 호출에서 예상 값을 유지하지만, 콜백 함수에 매개 변수를 특별히 전달하지 않으면 (여전히) 작업하고있는 더 복잡한 경우에는 여전히 콜백이 후속 호출에 의해 생성 된 값을 볼 수 있도록 매개 변수의 값을 변경하기 위해 2 회 연속 호출을 허용하는 조건 - 트리거 된 호출에서 논리적으로 설정된 값이 아님. 단순화 된 예제에서이 효과를 복제 할 수있는 사람이라면 고맙겠습니다. 나는 그것을 복제하는 jsFiddle을 생성하려고 내 함수를 깎아 내리고있다.

감사합니다, AE

+0

'무엇이'입니까? ? ? –

+0

안녕하세요, Interstellar_Coder, 댓글의 'a'는 코드의 첫 번째 if() 블록을 의미하고 'b'는 코드의 'else'블록을 나타냅니다. 주석이 도움이되지 않는다면 유감입니다. 더 잘 설명하는 좋은 예가 무엇입니까? ? – MyStream

답변

1

두 번 클릭하면 새 막대 변수가 만들어지며 두 막대 값은 서로 독립적입니다. 이 작업을 보려면 fiddle을 만들었습니다. 두 번 빨리 클릭하면 두 번째 시간 막대가 초기 값을 가지며 초기 막대 변수에있는 값이 아니라는 것을 알 수 있습니다.

+0

이것은 좋은 예입니다 (약간의 외부 변수와의 질문에 더 가깝게 일치하도록 편집 됨). 하나의 호출이 다른 호출에 영향을 미치지 않는 방법의 범위. 나는 그것을하기 위해 무엇을했는지 아직 보지 못했지만, 범위 문제보다는 오류를 더 많이 봤습니다. 범위 자체를 확장하고 각 이벤트 트리거에서 어떤 일이 발생하는지 설명 할 수 있습니까? 자체 포함되어 있습니까? – MyStream

0

이벤트 객체 대신 새로 따라서 다양한 이벤트와 함께 생성되는 약 전달, 'A'다시 할당 할 수 없습니다,하지만 두 이벤트 동작에 의해 영향을받을 것입니다.

+0

안녕하세요 @ 스왓 킨스, 당신이 의미하는 바를 잘 모르겠습니다. http://jsfiddle.net/BHaEj/4/ 링크 (변경됨)에서 두 번째 이벤트가 들어올 때 bar 변수가 블리치되지 않았 음을 보여 주며 코드에서 아직 끝나지 않았습니다. 후속 호출에서 if 루프의 변수에 영향을 미칠 수 있습니다. 내 변수 이름을 찾아 가서 별도의 문제가 있는지 살펴 보겠습니다. – MyStream

+0

글쎄, 바이올린에서, 당신은 글로벌 공간에서'카운트 '를했습니다. 그래서 그것은 이벤트 오브젝트에 전혀 묶여 있지 않습니다. 이벤트 오브젝트는'count'를 수정하고 있습니다. 그래서이 바이올린은 예상대로 작동합니다.그러나 클릭 액션의 콜백 함수에서'count'를 선언하면 클릭이 발생할 때마다 다시 선언됩니다. 이벤트 객체 자체는 동일하며 (속성에 대해 다른 값을 가짐) 선언 된 특정 변수는 각 액션에서 다시 선언됩니다. 다음은 jQuery 이벤트 객체에 대한 문서입니다. http://api.jquery.com/category/events/event-object/ – swatkins