Question

J'utilise un ticker de nouvelles pour une section de nouvelles dans une page et je souhaite utiliser le plugin de Prettyphoto avec ces nouvelles, mais aucune fonction jQuery ne fonctionne pas lorsque <li> les éléments changent leur position.

Par exemple, aucune des fonctions jQuery ne fonctionne pas lorsque le premier élément devient le dernier

Voici les codes

$(document).ready(function(){
    var first = 0;
    var speed = 1000;
    var pause = 3500;

    function removeFirst(){
       first = $('ul#listticker li:first').html();
       $('ul#listticker li:first')
        .animate({opacity: 0}, speed)
        .fadeOut('slow', function() {$(this).remove();});
       addLast(first);
    }

    function addLast(first){
        last = '<li style="display:none">'+first+'</li>';
        $('ul#listticker').append(last)
        $('ul#listticker li:last')
        .animate({opacity: 1}, speed)
        .fadeIn('slow')
    }

    interval = setInterval(removeFirst, pause);

        //Codes above are for the news ticker

    $(".news").click(function(e){
        e.preventDefault(); //I assign news class to links if there is no image for the news on db but it doesn't even work
    });

    $("#newsdiv a[rel^='gallery']").prettyPhoto({
        theme:'light_rounded'
    });
});

Et le résultat HTML des fonctions PHP

<ul id="listticker">
    <li>
        <img src="http://example.com/m.../k_haber.png"><a href="#" class="news">12.05.2011</a><span class="news-text">Some Title</span>
    </li>
    <li>
        <img src="http://example.com/../some.png"><a href="http://example.com/../news/p_some.jpg" class="news-title" rel="gallery[dd0]"> 12.05.2011</a><span class="news-text">Some Other Title</span>
    </li>
</ul>

Une idée de ce qui pourrait provoquer ceci ou comment le réparer?

ÉDITER:
Je suppose que le problème se produit en raison du sélecteur JQuery HTML.

Était-ce utile?

La solution 3

J'ai réalisé que les fonctions jQuery sont déclarées dans la fonction qui sera utilisée, alors j'ai finalement trouvé la solution.

Voici les codes

$(document).ready(function(){
    var first = 0;
    var speed = 1000;
    var pause = 3500;

    function removeFirst(){
       first = $('ul#listticker li:first').html();
       $('ul#listticker li:first')
        .animate({opacity: 0}, speed)
        .fadeOut('slow', function() {$(this).remove();});
       addLast(first);
    }

    function addLast(first){
        last = '<li style="display:none">'+first+'</li>';
        $('ul#listticker').append(last)
        $('ul#listticker li:last')
        .animate({opacity: 1}, speed)
        .fadeIn('slow',function(){
            $("a[rel^='gallery']").click(function() {
                $.prettyPhoto.open($(this).attr("href"),"","");
                return false;
            });
        });
        $(".news").click(function(e){
            e.preventDefault(); 
        });
    }

    interval = setInterval(removeFirst, pause);


    $("#newsdiv a[rel^='gallery']").prettyPhoto({
        theme:'light_rounded'
    });
});

Autres conseils

Obtenez vos variables et déclarations de fonction en dehors de l'événement DOM Ready. http://jsfiddle.net/jfahv/

Le sélecteur ": First" de JQuery renvoie l'élément de premier match, pas le premier élément enfant. Essayez d'utiliser: Premier enfant à la place.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top