2012-10-19 22 views
9

मेरे पास एक व्यक्ति वस्तु है और मैं अनिवार्य रूप से इसे अपने स्वयं के कार्यक्रमों को छोड़ने में सक्षम होना चाहता हूं। हालांकि यदि ट्रिगर ईवेंट में क्रोम की तुलना में प्रोटोटाइप के समान नाम होता है तो एक बड़ी त्रुटि होती है। person.murder के नीचे दिए गए कोड नमूने में murder ईवेंट ट्रिगर करता है जो कंसोल में एक त्रुटि लिखता है। (कोड अधिक समझ में आता है)।कस्टम ईवेंट ट्रिगर करने वाला JQuery त्रुटि

function Person() { 

} 

Person.prototype.murder = function() { 
    $(this).trigger("murder"); 
} 

और मैं आह्वान इस

var barry = new Person(); 
$(barry).on("murder", function(){ 
    alert("I am so angry"); 
}) 

barry.murder(); 

तो हत्या बैरी की तरह ट्रिगर एक त्रुटि का कारण बनता है, फिर भी अगर घटना personDied की तरह कुछ कोई त्रुटि नहीं है की तुलना में था। क्या मैं घटना को सही ढंग से ट्रिगर कर रहा हूं? मैं सिर्फ बिना किसी त्रुटि के लोगों को मारना चाहता हूं।

त्रुटि कभी कभी एक ढह <error> के रूप में दिया जाता है और कभी कभी के रूप में

Uncaught RangeError: Maximum call stack size exceeded

+4

के +1 – st3inn

उत्तर

9

समस्या यह है कि jQuery विधि रिकर्सिवली बुला रहा है है। http://api.jquery.com/trigger/ से:

Note: For both plain objects and DOM objects, if a triggered event name matches the name 
of a property on the object, jQuery will attempt to invoke the property as a method if no 
event handler calls event.preventDefault(). If this behavior is not desired, use 
.triggerHandler() instead. 

तो तुम triggerHandler बजाय trigger उपयोग करना चाहिए। जब से तुम वस्तु Person पर यह गति प्रदान

+0

दिलचस्प है! मैंने त्रुटि से रिकर्सिव चीज का अनुमान लगाया लेकिन मुझे पता नहीं था कि यह डिजाइन द्वारा था! ट्रिगर हैडलर एक इलाज करता है। अच्छा है – JonWells

1

ट्रिगर murderPerson पर विधि murder कहता है। यह फिर से murder विधि और इतने पर (अनदेखा पाश) पर कॉल करेगा।

यदि आप jQuery के .triggerHandler() फ़ंक्शन का उपयोग करते हैं तो यह केवल ट्रिगर को ट्रिगर करेगा, और विधि को कॉल नहीं करेगा।

function Person() { 

} 

Person.prototype.murder = function() { 
    $(this).triggerHandler("murder"); 
} 

var barry = new Person(); 
$(barry).on("murder", function(){ 
    alert("I am so angry"); 
}) 

barry.murder(); 

काम कर उदाहरण:

http://jsfiddle.net/6neHC/

jQuery .triggerHandler() दस्तावेज़: "। मैं सिर्फ त्रुटि के बिना लोगों की हत्या करना चाहते हैं"

http://api.jquery.com/triggerHandler/

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