2012-03-22 3 views
1

내가 코드의 두 라인 중 하나를 사용하여 이벤트 트리거 위젯 유지하기 위해 노력하고있어 :jQuery를 UI 위젯 '변화'이벤트

this.element.trigger('change'); // or... 
stop: function (event, ui) { that.element.change(); } 

단어 '변화'코드 만 4 번 발생합니다, 위의 2 가지 형식 중 하나에서 그러나, 나는 여기서 무슨 일이 일어나는 지 전혀 모른다. 변경 호출에는 이벤트 처리기가 없으며 바인드, 위임, 온 또는 라이브 호출이 없기 때문에 외부의 일부가이를 설정했을 수 있습니다. 누구든지 나를 채울 수 있습니까? 거기에 어떤 문서가 있습니까? 감사.

답변

2

두 줄의 코드는 두 가지 허용되는 구문을 사용하여 변경 이벤트를 this.element으로 트리거합니다. .trigger()를 사용

:

this.element.trigger('change'); 

아니면 속기 방법 .change() 사용 :

that.element.change(); 

당신은 실제로이 이벤트를 처리 할 this.element로 표현 요소에 이벤트 처리기를 바인딩 할 수 있습니다. 플러그인을 모른 채


, this.element 무엇에 정확하게 대답하기가 어렵습니다.

하지만 자동 완성 플러그인 예를 들어보세요. 여기서는 this.element이 실제로 자동 완성 플러그인이 적용되는 입력 필드입니다. 이 플러그인은 jQuery UI Widget Factory에 의존하는 지금, 만약이 것이 좋습니다


$('#myinput') 
    .autocomplete() 
    .bind('change', function() { }); 
은을 사용하기 : 변경 이벤트가 아마도 귀하의 질문에 다 같이 트리거 된 경우에는이 같은 입력에 이벤트 처리기를 바인딩 할 수 있습니다 메소드 _trigger()을 사용하여 jquery .trigger() 대신 이벤트를 트리거하십시오.

_trigger()를 사용하면 플러그인의 옵션에 정의 된 모든 콜백을 올바른 컨텍스트로 실행하고 this.element (위와 유사) 이벤트를 트리거합니다. 그래서 당신은 할 수 :

$('#myinput') 
    .somePlugin({ 
     change: function(e, someData) { 
      // "this" here will be `this.element´ 
     } 
    }) 
    .bind('change', function() { ... }); 
0

대답은 간단 밝혀졌다 - jQuery를이 장면 뒤에 아무것도하지 않는다, 더 바인딩/등 통화가 없었다, 어떤 이벤트 핸들러가 없기 때문에 트리거 호출은 아무것도하지 않았다. 나는 그것들을 주석 처리했고 위젯은 똑같이 행동했다. 도.