के बजाय सिर्फ टाइमर की गिनती है, यहाँ एक कार्यान्वयन जो एक सरणी में सभी timerid के संग्रहीत करता है। यह केवल सक्रिय टाइमर दिखाता है जबकि स्वीकृत उत्तर केवल setTimeout
& clearTimeout
पर कॉल की गणना करता है।
for(var i = timers.length; i--;)
clearInterval(timers[i]);
:
timers.length;
यह आप कैसे सभी सक्रिय टाइमर को दूर कर सकते हैं:
(function(w) {
var oldST = w.setTimeout;
var oldSI = w.setInterval;
var oldCI = w.clearInterval;
var timers = [];
w.timers = timers;
w.setTimeout = function(fn, delay) {
var id = oldST(function() {
fn && fn();
removeTimer(id);
}, delay);
timers.push(id);
return id;
};
w.setInterval = function(fn, delay) {
var id = oldSI(fn, delay);
timers.push(id);
return id;
};
w.clearInterval = function(id) {
oldCI(id);
removeTimer(id);
};
w.clearTimeout = w.clearInterval;
function removeTimer(id) {
var index = timers.indexOf(id);
if (index >= 0)
timers.splice(index, 1);
}
}(window));
इस तरह आप पृष्ठ पर सक्रिय टाइमर की गिनती प्राप्त कर सकते है ज्ञात सीमाएं:
- आप इस बंदर पैच के साथ केवल
setTimeout
पर एक फ़ंक्शन (स्ट्रिंग नहीं) पास कर सकते हैं।
- फ़ंक्शन
clearInterval
और clearTimeout
मानता है, वही करता है, लेकिन वे भविष्य में बदल सकते हैं।
ध्यान दें कि लाइन 2 में एक टाइपो है। window.cleartTimeout window.clearTimeout होना चाहिए। तो मुझे कम से कम 6 वर्णों को बदलने के बिना इसे संपादित करने नहीं देगा। – checker
अच्छी तरह से देखा गया, किसी ने देखा कि यह 3 साल पहले चला गया! –
मैंने आज कुछ कोड में इसका इस्तेमाल किया, लेकिन जब मुझे 'clearTimeout' * नहीं कहा गया था तो मुझे' सक्रिय टाइमर 'की आवश्यकता थी। यह 'window.setTimeout' की दूसरी पंक्ति को आसानी से पूरा करके आसानी से पूरा किया जाता है:' वापसी विंडो। ऑरिगिनलसेट टाइमआउट (फ़ंक्शन() {func(); सक्रिय टाइमर -;}, देरी); ' –