2012-02-24 15 views
15

संभव डुप्लिकेट:
Throttle event calls in jQueryJquery परिवर्तन

मैं jQuery का .change() कार्यक्षमता पसंद है, लेकिन मैं AJAX अनुरोध जब एक टन ट्रिगर रोकना चाहते हैं एक उपयोगकर्ता जल्दी ड्रॉप डाउन में विकल्प बदलता है। उदाहरण के तौर पर, जब कोई उपयोगकर्ता माउस स्क्रोल व्हील का उपयोग करता है, तो यह प्रत्येक विकल्प को ट्रिगर करेगा क्योंकि वे अपना नया विकल्प चुनते हैं।

उपयोगकर्ता केवल एक बार अपडेट ड्रॉपडाउन को अपडेट करने के बाद इन अद्यतनों को भेजने के लिए एक अच्छा साफ तरीका तैयार करना चाहता हूं।

क्या इस स्थिति को संभालने का कोई साफ तरीका है?

+5

जो आप खोज रहे हैं उसे * debouncing * कहा जाता है। –

उत्तर

60

यह करने के लिए विशिष्ट तरीका एक setTimeout और clearTimeout साथ है:

var wto; 

$('#select').change(function() { 
    clearTimeout(wto); 
    wto = setTimeout(function() { 
    // do stuff when user has been idle for 1 second 
    }, 1000); 
}); 
+3

Wto के लिए क्या खड़ा है? – Gisheri

+1

विंडो। टाइमऑट - उदाहरण के लिए बस यादृच्छिक विकल्प। – glortho

+0

यदि आप वैश्विक चर बनाना नहीं चाहते हैं, तो आप चुनिंदा तत्व को अंतराल आईडी असाइन करने के लिए '.data()' का उपयोग कर सकते हैं। थोड़ा और कोड लेता है, लेकिन मुझे पता है कि कुछ लोग वैश्विक चर बनाने को पसंद नहीं करते हैं। – Gavin

8

मैं सुझाव है कि आप तो Underscore.js उपयोग करने के लिए:

var newFunction=_.debounce(function(){ 
    alert('You function, after use stop scroll') 
},1000); //Wait seconds after he stops 

$('#select').change(newFunction); 

अधिक underscore.debounce बारे में पढ़ें।

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