2011-02-01 17 views
5

मैं बस कुछ jQuery कि इस तरह दिखता है भर में भाग गया:यह जावास्क्रिप्ट ईवेंट पर एक वर्ग प्रतीत होता है। यह क्या है?

$('.add-row').live('click.add', function() { 
    // do something 
} 

यह के लिए बाध्य किया गया प्रतीत होता 'click.add' घटना। मैं खुद को कस्टम इवेंट्स का उपयोग करता हूं और सोचता हूं कि वे बहुत ही अच्छे हैं, लेकिन हमारे कोड बेस पर git grep कर रहे किसी भी स्थान को प्रकट नहीं करते हैं जहां click.add नामक एक कस्टम इवेंट ट्रिगर किया जाता है, और किसी भी मामले में, यह व्यवहार सामान्य क्लिक से ट्रिगर होता है। न ही मैं HTML में कहीं भी .add कक्षा देखता हूं।

मुझे नहीं लगता कि आपके पास जावास्क्रिप्ट घटनाओं पर कक्षाएं हो सकती हैं। कोई विचार क्या वाक्यविन्यास का यह अजीब बिट है?

उत्तर

5

यह namespaced events नामक एक विशेष रुप से प्रदर्शित है। इस उदाहरण में, add एक नामस्थान है। यह प्रभावी रूप से घटनाओं के लिए एक वर्ग है, ताकि आप उन्हें वर्गीकृत कर सकें और तदनुसार उन्हें ट्रिगर कर सकें। उदाहरण के लिए, यदि आप किसी प्लग लिख सकते हैं और ताकि आप उन्हें उपयोगकर्ता के अन्य घटना हैंडलर निकाल बिना निकल सकते हैं हर ईवेंट हैंडलर myPlugin के नाम स्थान दे सकता है:

$('a').bind('click.myPlugin', function(){ /*...*/ }); // bind with the myPlugin namespace 
$('a').bind('click'), function() { /* ... */ }); // bind without a namespace 
$('a').unbind('.myPlugin'); // only removes the first function 

यह रूप में अच्छी तरह trigger के लिए काम करता है।

+0

शानदार उदाहरण! मैं वास्तव में एक jQuery प्लगइन पर काम कर रहा हूं जो उस तकनीक से लाभ उठा सकता है। यह दिखाने के लिए धन्यवाद कि यह क्या है, लेकिन कोई इसका उपयोग क्यों कर सकता है। –

7

http://api.jquery.com/event.namespace/ और विशेष रूप से http://api.jquery.com/bind/ देखें: (।)

eventType स्ट्रिंग एक अवधि चरित्र है, तो घटना namespaced होता है। अवधि वर्ण ईवेंट को नामस्थान से अलग करता है। उदाहरण के लिए, कॉल । बाइंड ('click.name', हैंडलर) में, स्ट्रिंग क्लिक ईवेंट प्रकार है, और स्ट्रिंग नाम नामस्थान है। नेमस्पेसिंग हमें अनबिंड करने की अनुमति देता है या बिना किसी अन्य प्रकार की घटनाओं को ट्रिगर करता है। अधिक जानकारी के लिए .unbind() की चर्चा देखें।

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