2014-05-15 5 views
5

मुझे एक AJAX अनुरोध मिला है जो उपयोगकर्ता द्वारा किसी निश्चित टेक्स्टरे में कुछ बटन (टेक्स्ट लिखता है) निष्पादित करता है। यह पहले से ही बहुत अच्छा काम करेगा (यह एक खोज फ़िल्टरिंग फ़ंक्शन btw है।), लेकिन प्रत्येक कीस्ट्रोक के बाद फ़िल्टर निष्पादित करना अच्छा नहीं होगा। तो मैं देरी की बात करने के बारे में सोच रहा था। तो AJAX अनुरोध केवल तभी निष्पादित होगा जब उपयोगकर्ता ने अंतिम बटन दबाए जाने के बाद से कम से कम 1 सेकंड बीत चुका है। इसे कैसे प्राप्त किया जा सकता है?AJAX अनुरोध onkeyup को निष्पादित करने से पहले 1 सेकंड प्रतीक्षा करें

<textarea id="text" name="text" onkeyup="Search()"</textarea> 

function Search() 
{ 
    $.ajax({... 
    ... 
} 

तो जाहिर है कि यह हर समय चल जाएगा। उदाहरण के लिए यदि मैं textarea में "हैलो" टाइप करता हूं तो यह 5 बार चलाएगा और इसका कोई उपयोग नहीं होगा। यह केवल तब चलाने के लिए पर्याप्त होगा जब मैंने 1 सेकंड से अधिक समय तक लिखना बंद कर दिया था।

उत्तर

7

आप setTimeout का उपयोग कर सकते हैं ताकि मिलीसेकंड की एक निश्चित संख्या के लिए कार्रवाई में देरी हो सके। अगर कोई जल्दी टाइप करता है तो आप कतारबद्ध होने के अनुरोधों को रोकने के लिए टाइमआउट को भी साफ़ कर सकते हैं। इस प्रयास करें:

var timer; 
function Search() { 
    clearTimeout(timer) // clear the request from the previous event 
    timer = setTimeout(function() { 
     $.ajax({ 
      // ... 
     }); 
    }, 200); 
} 

नोट मैं देरी 200 मि.से जो सामान्य रूप से पर्याप्त समय के लिए किसी कई चाबियाँ टाइप किया है करने के लिए की तुलना में अधिक है, लेकिन पर्याप्त त्वरित कि यह यूआई अद्यतन करने के लिए के लिए बहुत धीमी गति से दिखाई नहीं देतीं।

+0

शायद आपको 'सेटटाइमआउट' की वापसी के साथ 'टाइमर' सेट करना चाहिए :) – Holt

+0

@ हॉल्ट धन्यवाद! बहुत तेज टाइपिंग, अधिक देरी की आवश्यकता है;) –

+0

धन्यवाद, यह वास्तव में मेरी समस्या हल हो गया! :) शुरुआत करने के लिए खेद है, लेकिन मैं तेज़ी से सीखता हूं। :) – egyeneskanyar

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