2012-05-16 25 views
6

मैं jquery के बीच देरी जोड़ने की कोशिश कर रहा हूं .removeClass कॉल को तालिका के कक्षों के माध्यम से पुनरावृत्ति करते समय कॉल करता है। कोशिकाएं कोई सेटटाइमआउट के साथ ठीक से प्रदर्शित होती हैं, लेकिन सेटटाइमआउट कोड कोड ब्रेक के साथ। मैं क्या गलत कर रहा हूं?setTimeout jquery.each के साथ काम नहीं कर रहा है, यह

function reveal_board() { 
$("td").each(function() { 
    var t=setTimeout('$(this).removeClass("invisible")', 500); 
}); 
} 

उत्तर

15

इस प्रयास करें:

function reveal_board() { 
    $("div").each(function(index) {   
     (function(that, i) { 
      var t = setTimeout(function() { 
       $(that).removeClass("invisible"); 
      }, 500 * i); 
     })(this, index); 
    }); 
} 

यह आम तौर पर setTimeout() के लिए एक स्ट्रिंग पारित करने के लिए एक बुरी आदत है और यह भी मुझे नहीं लगता कि आप किसी भी चर जब यह इस तरह का उपयोग कर पारित कर सकते हैं करते हैं।

मैंने यह सुनिश्चित करने के लिए इसे बंद कर दिया है कि that हमेशा सही तत्व पर लागू होता है और प्रतिस्थापित नहीं किया जाता है।

हालांकि, निफ्टीडुड की तरह कहते हैं कि आप इंडेक्स में पास करना चाहते हैं और प्रत्येक तत्व को बदले में प्रदर्शित करने के लिए इसका उपयोग कर सकते हैं। -

कार्य उदाहरण की तरह आप बंद की जरूरत नहीं है http://jsfiddle.net/Cc5sG/

संपादित

लग रहा है:

function reveal_board() { 
    $("div").each(function(index) {   
     var that = this; 
     var t = setTimeout(function() { 
      $(that).removeClass("invisible"); 
     }, 500 * index);   
    }); 
} 

http://jsfiddle.net/Cc5sG/1/

+0

यह काम करता है, सुंदर, धन्यवाद! – valen

+0

धन्यवाद!, मेरे 3 घंटे संघर्ष को बचाएं :( – Bhimbim

+0

संपादन के लिए सूखी, मैंने गोपनीय रूप से डाउनवॉट किया और संपादित करना पड़ा ताकि मैं फिर से ऊपर जा सकूं। – Black

1

पहली बात पहले, setTimeout का पहला तर्क के लिए स्ट्रिंग के उपयोग से बचें, anon फ़ंक्शन का उपयोग करें यह डिबग करने के लिए आसान है बजाय के रूप में और बनाए रखने के:

$("td").each(function() { 
    var $this = $(this); 
    var t=setTimeout(function() { 
     $this.removeClass("invisible") 
    }, 500); 
}); 

इसके अलावा, मैं सच में यकीन नहीं है कि तुम क्या यहाँ प्राप्त करने के लिए (जो बाद में अपने प्रश्न का अद्यतन करें और मैं अपने जवाब अनुकूलित करेंगे) की कोशिश कर रहे हैं, लेकिन आप के बाद एक दूसरे के प्रत्येक td 500 एमएस से invisible वर्ग निकालना चाहते हैं, तो आप उपयोग कर सकते हैं index:

$("td").each(function() { 
    var $this = $(this); 
    var t=setTimeout(function(index) { 
     $this.removeClass("invisible") 
    }, 500 * (index+1)); 
}); 
2

आपकी this वैश्विक window पर इंगित किया गया है।

function reveal_board() { 
    $("td").each(function() { 
    $this = $(this); 
    var t=setTimeout(function(){$this.removeClass("invisible");}, 500); 
    }); 
} 
1

ठीक है, मैं एक ही समस्या मिला है और मैंने इसे इस तरह हल किया ... लेकिन मुझे प्रदर्शन या जो कुछ भी मैंने इसका इस्तेमाल नहीं किया, उसके बारे में मुझे कोई जानकारी नहीं है एक बहुत ही कम लूप (अधिकतम 10 तत्व) में और यह पूरी तरह से काम करता है ... जिस तरह से मैंने इसे कक्षा जोड़ने के लिए उपयोग किया था, इसलिए मैं आपको कक्षा को हटाने के लिए जो कुछ देता हूं उसे समझने दूंगा;)।

var elements = $(".elements"); 
var timeout; 

elements.each(function(e){ 
    timeout = setTimeout(function(index) { 
     elements[elements.length-e-1].setAttribute('class', elements[elements.length-e-1].getAttribute('class')+' MY-NEW-CLASS'); 
    }, 500 * e); 
}); 
संबंधित मुद्दे