2009-12-12 18 views
6

मेरे पास निम्न कोड है लेकिन स्पष्ट टाइमआउट काम नहीं करता है और मैं समझ नहीं पा रहा हूं कि किसी के पास कोई विचार क्यों है? (प्रोटोटाइप ढांचे का उपयोग करना)टाइमआउट ईवेंट को रद्द करने के लिए clearTimeout का उपयोग

धन्यवाद

function foo() { 
    $("navigation").observe('mouseover', 
     function (event) { 
      clearTimeout(bar); 
     } 
    ).observe('mouseout', 
     function (event) { 
      setTimeout(bar, 1000); 
     } 
    ); 
} 

function bar() { 
    alert("hi"); 
} 

उत्तर

19

तुम एक में setTimeout का परिणाम स्टोर करने के लिए की जरूरत है परिवर्तनीय, और उस चर को साफ़ करने के लिए clearTimeout का उपयोग करें, फ़ंक्शन नहीं:

var timer; 

function foo() { 
    $("navigation").observe('mouseover', 
     function (event) { 
       clearTimeout(timer); 
     } 
    ).observe('mouseout', 
     function (event) { 
       timer = setTimeout(bar, 1000); 
     } 
    ); 
} 

function bar() { 
    alert("hi"); 
} 
+0

आह अब मैं समझ, धन्यवाद लोग :) – Rich

+0

अरे, कोई समस्या नहीं:

setTimeout वास्तव में एक संदर्भ जो आप clear the timeout का उपयोग कर सकते देता है। उत्तर में से एक को "स्वीकृत" समाधान के रूप में चुनकर हल किए गए उत्तर को चिह्नित करना सुनिश्चित करें। –

+0

मुझे वास्तव में एक समस्या थी जब टाइमर चर वैश्विक नहीं था। मुझे window.timer का उपयोग करना पड़ा; मेरा सुझाव है कि आप अपने उत्तर पर विस्तार करें। –

6

clearTimeout समारोह तर्क setTimeout समारोह से वापस लौटे ले क्योंकि:

var t = null; 
function foo() { 
    $("navigation").observe('mouseover', 
     function (event) { 
      if (t != null) clearTimeout(t); 
     } 
    ).observe('mouseout', 
     function (event) { 
      t = setTimeout(bar, 1000); 
     } 
    ); 
} 

function bar() { 
    alert("hi"); 
} 
संबंधित मुद्दे