문제

YUI3로 교체 이벤트를 프로그래밍 방식으로 발사하는 방법이 궁금했습니다. 하나의 일부 상자 노드에 변경 리스너를 추가했습니다.

Y.get('#mynode').on('change', function(e) {
 Alert(“changed me”);
});

그리고 스크립트의 다른 곳에서는 그 사건을 해고하고 싶어합니다. 물론 사용자가 브라우저에서 선택 상자 값을 변경하면 작동합니다. 그러나 나는 프로그래밍 방식으로 그것을 해고하는 여러 가지 방법을 시도했지만 아무도 효과가 없었습니다. 포함:

// All below give this error: T[X] is not a function (referring to what's called in .invoke(), // in the minified javascript
Y.get('#mynode').invoke('onchange');
Y.get('#mynode').invoke('change');
Y.get('#mynode').invoke('on','change');
Y.get('#mynode').invoke("on('change')");


/* Tried using .fire() which I found here: 
* http://developer.yahoo.com/yui/3/api/EventTarget.html#method_fire
* Nothing happens
*/

Y.get('#mynode').fire('change'); 

/* Looking around the APIs some more, I found node-event-simulate.js: 
 * http://developer.yahoo.com/yui/3/api/node-event-simulate.js.html, 
 * which by its name would seem to have what I want. I tried:
 * Error: simulate(): Event 'change' can't be simulated. 
 * ( (function(){var I={},B=new Date().getTim...if(B.isObject(G)){if(B.isArray(G)){E=1;\n)
 */

Y.get('#mynode').simulate('change');

모든 도움이 감사하겠습니다!

도움이 되었습니까?

해결책

Yui 3.0은 시뮬레이션을 지원하지 않습니다 change 당신이 발견 한 것처럼 이벤트. 그러나 Yui 3.1에서는 지원됩니다. 그것은이다 트렁크에서 지금.

세 번째 시도 :

Y.get('#mynode').simulate('change');

3.1에서 작동해야합니다.

편집하다

Yui 3.0 버전을 대체 할 수있는 것 같습니다. event-simulate.js 트렁크 버전을 사용하면 다른 3.0 앱에서 작동합니다. 나는 지금까지 어떤 문제도 보지 못했습니다.

다른 팁

일반적인 솔루션은 프로그래밍 방식으로 이벤트를 발사하는 것이 아니라 모든 이벤트 논리를 함수로 이동하고 대신 적절한 경우 코드에서 해당 기능을 호출하는 것입니다.

Y.get('#mynode').on('change', function(e) {
    AlertUserOfChange();
});

function AlertUserOfChange()
{
    Alert(“changed me”);
}

이건 어때

Y.Event.simulate('#mynode', 'change');
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top