2011-02-02 14 views
15

मुझे आश्चर्य है कि यह एक जावास्क्रिप्ट इवेंट श्रोता को मजबूर करने के लिए संभव है, बिना शर्त निष्पादित करने के लिए सशक्त बल हो सकता है, फिर आगे की स्थिति को निष्पादित करने के लिए इसकी स्थिति को सुनना जारी रखें?बल जावास्क्रिप्ट EventListener एक बार निष्पादित करने के लिए?

+0

"बिना शर्त के सत्य" ... क्या स्थिति? इसके अलावा, अगर यह एक बार आग लग जाएगा, तो सुनना जारी रखें, फिर संभवतः फिर से आग लगाना, फिर ... यह एक बार फायरिंग नहीं कर रहा है। जब तक आप का मतलब नहीं है कि आप कभी भी एक समय में एक घटना को संसाधित करना चाहते हैं (एकाधिक एक साथ नहीं)? – KOGI

+0

क्या आप जावास्क्रिप्ट ढांचे का उपयोग कर रहे हैं? मुझे लगता है कि एक्स्टजेस में यह संभव है। JQuery में भी हो सकता है। – Marc

+0

jQuery में एक .one() विधि है, लेकिन मुझे यकीन नहीं है कि यह वही है जो आप खोज रहे हैं। हालांकि, आप केवल हैंडलर में ईवेंट को फिर से बांध सकते हैं। यह एक साथ घटनाओं को संभालने का असर नहीं होगा, फिर हैंडलर पूरा होने के बाद, घटना को फिर से सुनना शुरू करें। http://api.jquery.com/one/ – KOGI

उत्तर

0

यदि आप एक समारोह में कोड लपेट, बस पृष्ठ लोड पर फ़ंक्शन को कॉल

उदाहरण जोड़ने के लिए संपादित:

पता नहीं क्या आपके घटना, लेकिन यहाँ है एक उदाहरण है:

<a ..onclick='someFunction()'>click</a> 

<script type='text/javascript'> 
function someFunction() { 
    // do whatever 
} 

// call the function 
someFunction(); 
</script> 
+0

यदि आपको किसी विशेष संदर्भ में फ़ंक्शन की आवश्यकता है, तो आप jQuery की प्रॉक्सी() विधि का उपयोग कर सकते हैं http://api.jquery.com/jQuery.proxy/ – KOGI

-1

यदि मैं आपके प्रश्न को सही ढंग से समझता हूं, तो आप केवल एक घटना को एक समय में संभालना चाहते हैं (यदि कोई घटना तेजी से उत्तराधिकार में कई बार आग लगती है, तो आप केवल उनमें से एक को संभालना चाहते हैं) फिर एक बार हैंडलर पूरा होने के बाद, आप सुनना जारी रखेंगे अधिक घटनाएं सही बात?

jQuery एक .one() विधि api.jquery.com/one

यह केवल घटना एक बार संभालती है, लेकिन अगर आप हैंडलर में घटना फिर से बाँध, तो यह के रूप में आप चाहते हैं कार्य करेंगे है।

function handler() 
{ 
    // do stuff 

    $(this).one('click', handler); 
} 

$('.someElement').one('click', handler); 
34
var clickFunction = function (event) { 
    //do some stuff here 
    window.removeEventListener('click',clickFunction, false); 

}; 
window.addEventListener("click", clickFunction, false); 

यह आपको clickFunction एक बार सक्रिय, के रूप में बंद के जादू removeEventListener clickFunction ढूँढते हैं करने देगा।

कुछ सरल करने के लिए पुस्तकालय का उपयोग करने की आवश्यकता नहीं है।

+0

यदि आपको इस पैटर्न का उपयोग करने की आवश्यकता है तो यह जल्दी से एक समस्या बन जाती है एक कोड में दो बार। यह सीएसएस एनीमेशन संदर्भों में बहुत आम है जहां आपके पास एनीमेशन है "हुक ट्रांजिशनेंड, सेट चेंज, ट्रांजिशनेंड खुद को हटा दें", और अक्सर आपको इसे चेन करना पड़ता है। Http://hastebin.com/ikixonajuk.coffee के समान एक पैटर्न कहीं अधिक रखरखाव योग्य है। नोडजेएस में इसे सिर्फ "एक बार" कहा जाता है। – Dmitry

+0

1. 2011 में जब उत्तर मूल रूप से पोस्ट किया गया था, तो एक बार उपलब्ध नहीं था। 2. यह मूल प्रश्न में क्लाइंट साइड कार्यान्वयन प्रश्न है इसलिए nodejs उपयोगी नहीं है 3. आपकी कॉफी स्क्रिप्ट अनिवार्य रूप से मामूली संशोधन के साथ एक ही विचार है। – Jlam

+1

अब ब्राउज़र में अब एक बार उपलब्ध है या फिर भी हमें इसका आविष्कार करना है/इसके लिए ब्लूटेड तृतीय पक्ष पुस्तकालयों का उपयोग करना है? – Dmitry

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