2009-09-04 9 views
23

हाय फिर से वेब के परास्नातक :) अब, मुझे एक नया बेवकूफ सवाल मिला है, और मैं मुझे माफ करने के लिए कह रहा हूं। मैंने इस समाधान के बारे में हर जगह पढ़ा, लेकिन मेरे लिए काम करने वाला कोई नहीं मिला।OnKeyUp जावास्क्रिप्ट समय विलंब?

मैं मिल गया है:

<input name="domain" type="text" id="domain" onKeyUp="javascript:chk_me();"> 

सभी मैं पूछ रहा हूँ के बाद एक बटन दबाया जाता है इस जांच करने के लिए नहीं बनाने के लिए कैसे, लेकिन उसके बाद कुंजीपटल निष्क्रियता के 1000 मिलीसेकंड कहने के लिए है?

उत्तर

34

इस प्रयास करें: हर बार एक कुंजी दबाने

var timer; 
function chk_me(){ 
    clearTimeout(timer); 
    timer=setTimeout(function validate(){...},1000); 
} 

इस तरह, टाइमआउट को हटा दिया जाएगा और फिर से सेट।

+2

मुझे लगता है कि 'var timer' को फ़ंक्शन बॉडी के बाहर होना चाहिए – Rodrigo

+0

आप सही हैं कि फ़ंक्शन के बाहर टाइमर सेट किया जाना चाहिए, मैंने जवाब – mck89

+0

उत्तर संपादित किया है! एक उचित मार्जिन द्वारा बहुत से का जवाब। – Shog9

-2

setTimeOut() एक हो सकता है;)

<input name="domain" type="text" id="domain" onKeyUp="setTimeout('chk_me()',1000);"> 

link text

+0

यह जब 'chk_me बुला' this' संदर्भ चर के मूल्य को सुरक्षित नहीं करेगा() '। साथ ही, 'setTimeout()' की भिन्नता का उपयोग करके जो कोड युक्त स्ट्रिंग को लेता है और उसका मूल्यांकन करता है, इस परिदृश्य में व्यर्थ दोनों और सभी परिदृश्यों में गन्दा है। – Shog9

+0

हाय बर्ज़ेमस, आपके उत्तर के लिए धन्यवाद। मैंने सभी तैयार करने की कोशिश की है। यह काम करता है, लेकिन समस्या यह है कि यह स्क्रिप्ट निष्पादन में देरी नहीं करता है। यह हर एक कुंजी प्रेस के बाद देरी करता है ... – Spoonk

16

एक और दृष्टिकोण, वैश्विक बिना:

var typewatch = function(){ 
    var timer = 0; 
    return function(callback, ms){ 
     clearTimeout (timer); 
     timer = setTimeout(callback, ms); 
    } 
}(); 

उपयोग:

घटना अटैच किया जा रहा जावास्क्रिप्ट के माध्यम से:

window.onload = function() { 
    document.getElementById('domain').onkeyup = function() { 
     typewatch(function(){alert('Time elapsed!');}, 1000); 
    }; 
}; 

या एक इनलाइन ईवेंट हैंडलर (का उपयोग कर इतना अनुशंसित नहीं) जैसा कि आपके उदाहरण में है:

<input type="text" name="domain" id="domain" 
    onKeyUp="typewatch(function(){alert('Time elapsed!');}, 1000);"/> 

डेमो here का प्रयास करें।

+1

आपको क्या लगता है कि टाइपवेच वैश्विक नहीं है? –

+1

हाँ टाइपवेच वैश्विक है, लेकिन मेरा मतलब है कि ** टाइमर ** चर वैश्विक स्तर पर नहीं है, और केवल टाइपवॉच फ़ंक्शन द्वारा ही पहुंचा जा सकता है। – CMS

0

वास्तव में उपयोगी पोस्ट!

वैश्विक बिना एक और दृष्टिकोण का उपयोग करते हुए समारोह गुण:

function chk_me(){ 
    if(typeof timer !== undefined){ 
    clearTimeout(this.timer); 
    } 
    this.timer=setTimeout(function validate(){validate(...)},1000); 
} 
संबंधित मुद्दे