2011-11-21 2 views
0

J'ai propre code de la galerie comme:setTimeout() avec jQuery ne fonctionnent pas sur Chrome

// Gallery 
$(function() { 
    var images = $('#gallery ul li img'); 
    var next = 0; 
    var timer; 
    var delay = 5000; 
    images.click(function() { 
    if($(this).hasClass('current')) return false;     // Prevent from re-showing 
    $('#gallery ul li.current').toggleClass('current');    // Change current highlighted photo 
    $(this).parent().toggleClass('current');      // to $(this) 
    $('#gallery img#show-window').attr('src', $(this).data('src')); // Change viewed photo 
    $('#gallery .panel h2').text($(this).attr('title'));   // Set title 
    $('#gallery .panel p').text($(this).attr('alt'));    // Set description 
    next = $.inArray(this, images) + 1; 
    clearTimeout(timer); 
    timer = setTimeout(function() { 
     images[next % images.length].click(); 
    }, delay); 
    }); 
    images[0].click(); 
}); 

Et si je le lance sur Chrome (Arch Linux 15.0.874.121 (Build Linux 0)) il ne montre pas d'image avant de cliquer sur l'un des aperçus de la galerie et même après, il ne passe pas à l'image suivante après 5s. Cela fonctionne sur Firefox 8.0 et Opera 11.52.

+1

Effectuez un débogage. Le clic est-il même appelé la première fois? Qu'en est-il de la deuxième fois? Je pense que si vous déplaciez la portée des "images" dans l'appel de fonction anonyme, cela pourrait résoudre votre problème. – Jonathan

Répondre

1

Avez-vous essayé la fonction "doTimeout"?

$.doTimeout('someid', 1000, function(state){ 
      .alert(state); // alert true in 1 second 
      .}, true); 
+0

Je l'ai résolu. Je devrais seulement ajouter '$()' sur 'images [0]' et ça marche. Mais merci @brpyne. – Hauleth

0

Peut-être juste moi, mais il semble un peu redondant de le faire avec setTimeout cliquant programatically l'image suivante lorsque vous pouvez le faire avec setInterval.

function nextImage() 
{ 
    // insert image selection logic here 
} 

$(function(){ 
    var imgDaemon = setInterval(nextImage(), 5000); 
}); 
+0

Il n'y avait pas de problème avec l'une des fonctions 'timeout' avec la fonction non reconnue' .click() '. – Hauleth

Questions connexes