2010-07-07 16 views
6

हम जानना चाहते हैं कि कई तत्वों का निरीक्षण करने के लिए jQuery का उपयोग करना संभव है और, एक क्लिक द्वारा उन्हें दिए गए प्रकारों के आधार पर, अन्य फ़ंक्शंस निष्पादित करें। असल में, एक फ़ंक्शन जो हमेशा के लिए चलाएगा, जबकि उपयोगकर्ता पृष्ठ को रीफ्रेश नहीं करता है।jQuery अनंत फ़ंक्शन निष्पादन

विचार फ़ंक्शन करने के लिए ईवेंट क्लिक पर निर्भर नहीं है, लेकिन एक विशिष्ट तत्व को आवंटित कक्षाएं।

उदाहरण के लिए:

$("td.gantt").each(function() { 
    if($(this).hasClass("oper")) { 
     //execute a serie of functions 
    } 
    if($(this).hasClass("preop")) { 
     //execute a serie of functions 
    } 
}); 

ऊपर एक बार निष्पादित किया जाता है, और हम सभी को समय से चलाने की जरूरत है।

उत्तर

17
// define a function... 
function ganttEach() { 
    $("td.gantt").each(function() { 
    // ... 
    }); 
} 

// ...repeat it once every second 
window.setInterval(ganttEach, 1000); 

आप (जैसे, एक while(true) पाश में) क्योंकि जावास्क्रिप्ट एकल पिरोया और धागा अवरुद्ध अपने अन्य कोड कभी नहीं चलेंगे है नहीं "हर समय इसे चलाते हैं" कर सकते हैं। setInterval() सुनिश्चित करता है कि अन्य कोड निष्पादित करने के लिए आवश्यक "अंतराल" हैं।

setInterval() एक आईडी देता है जिसे आप एक चर में स्टोर कर सकते हैं और clearInterval() पर इसे फिर से रोकने के लिए फ़ीड कर सकते हैं।


आप केवल के बाद पिछले एक वास्तव में समाप्त हो गया है सुनिश्चित करें कि आपके समारोह के हर नई यात्रा शुरू होता है बनाना चाहते हैं, setTimeout() बजाय का उपयोग करें:

// define a self-repeating function... 
function ganttEach() { 
    $("td.gantt").each(function() { 
    // ... 
    }); 
    window.setTimeout(ganttEach, 1000); // calls itself again in one second 
} 

// ...initiate self-repeating function 
ganttEach(); 

आप को किसी तरह से शामिल हैं शायद चाहिए यहां पर अंतहीन पुनरावृत्ति को भी रोकें, जैसे setTimeout() कॉल से पहले चेक किए गए ध्वज को शुरू करना।

+0

सेटटाइमआउट के लिए +1() –

+0

+1 हाँ साइट टाइमआउट मतदान से बच सकता है – galambalazs

+0

बैंडविड्थ खपत के बारे में क्या? आईई के तहत प्रदर्शन? – betacar

0

मुझे यकीन नहीं है कि आप वास्तव में क्या करने की कोशिश कर रहे हैं, लेकिन क्या आपने सेट इंटरवल की कोशिश की है? यह वही है जो आप वास्तव में चाहते हैं।

3

setInterval के साथ यह संभव है। मेरी सलाह दोहराए गए फ़ंक्शन के बाहर तत्व का चयन करना होगा ताकि ओवरहेड को कम करें।

एक अनंत लूप ब्राउज़र UI ताला होगा, क्योंकि यह एक एकल थ्रेड माहौल है। अंतराल सेट करें, हालांकि आप UI स्टैक पर क्रियाएं जोड़ने दें जो किसी निश्चित अवधि के बाद निष्पादित की जाएंगी। आप इस अवधि को के दूसरे पैरामीटर में निर्दिष्ट कर सकते हैं।

// select the element outside 
// to minimize overhead 
$gantt = $("td.gantt"); 

// define a repeating action 
setInterval(function() { 
    $gantt.each(function() { 
     if($(this).hasClass("oper")) { 
      //execute a serie of functions 
     } 
     if($(this).hasClass("preop")) { 
      //execute a serie of functions 
     } 
    }); 
}, 100); // repeat interval: 100ms 
+2

+1। – Tomalak

+0

@galambalazs: मुझे प्यार है कि मेरी "+1" टिप्पणी ने दो वोटों को आकर्षित किया (उनमें से एक स्वयं का है, मुझे लगता है), लेकिन आपके उत्तर में अभी भी केवल +1 है। ;-) अगर मैं "+1" टिप्पणी से सहमत हूं तो क्या मैं जवाब को भी वोट नहीं देना चाहिए? हमम ... :-) – Tomalak

+0

@ टोमालाक I upvoted क्योंकि इसमें एक वैध बिंदु (सेटटाइमआउट) है, जिसे मैंने सोचा लेकिन फिर अनदेखा किया। लेकिन इसे एक और विचार देने के बाद मुझे एहसास हुआ कि अगर मैं ऐसी चीज कभी नहीं करूंगा, तो यूआई स्टैक में फ़ंक्शंस इकट्ठा होने पर एक लंबे jQuery कोडबेस ब्राउज़र में हैंगअप का कारण बन सकता है। और चूंकि आपने इसे लिखा है, इसलिए मैंने आपको +1 दिया क्योंकि इसे हाइलाइट किया जाना चाहिए। :) – galambalazs

3

आप अपना चेक हर कुछ मिलीसेकेंड चला सकते हैं, 50ms setInterval

window.setInterval (function() { 
    // do checks here 
}, 50); 

का उपयोग कर कहते हैं, आप CPU शक्ति का एक बहुत का उपयोग कर यदि आपके चेक भी अक्सर, या बहुत जटिल हैं अंत हो सकता है।

+0

इस समाधान का लाभ वह है जो शरीर से चलाया जा सकता है। –

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