2009-07-31 13 views
16

मैं सोच रहा था प्रोग्राम रूप YUI3 के साथ एक परिवर्तन घटना आग - मैं एक सलेक्ट बॉक्स नोड के लिए एक परिवर्तन श्रोता कहा:YUI 3 प्रोग्राम के रूप में आग परिवर्तन घटना

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'); 

किसी भी मदद की सराहना की होगी!

उत्तर

12

YUI 3.0, change घटनाओं अनुकरण के रूप में आप की खोज की है समर्थन नहीं करता। हालांकि यह यूयूआई 3.1 में समर्थित होगा। यह अब in the trunk है।

आपका तीसरे प्रयास:

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

3,1 में काम करना चाहिए।

संपादित

ऐसा लगता है कि तुम सिर्फ ट्रंक संस्करण के साथ event-simulate.js की YUI 3.0 संस्करण की जगह ले सकता है, और यह एक अन्यथा 3.0 अनुप्रयोग में काम करेंगे। मैंने अभी तक कोई समस्या नहीं देखी है।

+1

बस एक नोट: आपको उपलब्ध होने के लिए .simulate() के लिए y.use ('node-event-simulate', ...) होना चाहिए। – thenickdude

6

सामान्य समाधान कार्यक्रम को प्रोग्रामेटिक रूप से आग नहीं करना है, बल्कि सभी ईवेंट तर्क को किसी फ़ंक्शन पर ले जाना है, और इसके बजाय उस फ़ंक्शन को अपने कोड से उचित कहें।

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

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

हाँ, मैं सामान्य रूप से ऐसा करता हूं लेकिन मैं वास्तव में जानना चाहता था कि यह संभव था या नहीं। मुझे लगता है कि यह नहीं है। – ash

+1

'वाई .get ('# mynode')। ('बदलें', AlertUserOfChange); 'आपको बस इतना ही चाहिए। फिर Parert e को AlertUserOfChange में जोड़ें, जैसे 'फ़ंक्शन AlertUserOfChange (e) ' – imns

-1

कैसे के बारे में इस

Y.Event.simulate('#mynode', 'change'); 
+0

क्षमा करें, यह काम नहीं करता है। – ash

संबंधित मुद्दे