Scroll infini + script jquery ( qui ne charge plus )

Par kaloutch, il y a 13 ans


salut a tous,

j'ai beau bouger dans les 4 coins du web pour trouver une solution a mon problème et je ne trouve pas !

Sur la page de mon site vous avez vos articles avec un bouton "supprimer", et un bouton "jaime".

les éventuelles solution, je pense a recharger juste le fichier "jaime.js" et "suprimer.js" une seul fois pour tous les articles a chaque fin de chargement du fichier "load.php" ( mais la je sais pas si c'est possible ou bien la vrai solution )

si vous avez besoin de plus d'explication , demander sur quoi j’essayerai de développer , merci de votre attention!

js.

<script type="text/javascript">
                                $(window).scroll(function(){
                                    if ($(window).scrollTop() == $(document).height() - $(window).height()){
                                        $.ajax({
                                            url : "load.php?lastid=" + $(".bcrpc_message:last").attr("id") + "&iduser=" + $(".userid").attr("id"),
                                            success: function(html){
                                                if (html){
                                                    $(".bcrp_content").append(html);
                                                }
                                                else{
                                                    alert('plus rien :(');
                                                }
                                            }
                                        });
                                    }
                                });
                            </script>

8 réponses

kaloutch, il y a 13 ans

ok je vais tester ca je te remercie

s4p, il y a 13 ans

Salut,
quand tu affectes un click en faisant :

$('.like').click(function(){ save_like(); });

la fonction save_like() est affectée au click sur les éléments .like présents dans la page.
Quand tu réinsères du code html, s'il comporte des éléments .like, il faut rebinder la fonction

exemple :

if (html){
    $(".bcrp_content").append(html).find('.like').bind('click', function(){ save_like(); });
}

exemple 2 :

function bind_like(){ $('.like').click(function(){ save_like(); }); }

if (html){
    $(".bcrp_content").append(html);
    bind_like();
}

Avec 'live' tu n'as pas besoin de mettre à jour, ça se fait tout seul :

$('.like').live('click', function(){ save_like(); });
kaloutch, il y a 13 ans

alors je vois un peu se que tu veux dire mais n’étant pas un expert avec js ( mais j’apprends tous les jours ^^ ) je crois que mon bouton "*j'aime*" n'est pas celui que tu imagine . jaime.js [code] var JaimeWall = { evenements: function() { // $('a.jaime').click(this.click); $('button.jaimemur').click(JaimeWall.click); }, precharger: function() { var jaimesmur = $('button.jaimemur'); for(var i = 0, l = jaimesmur.length; i 0) { if (votexist == true) { $(this).html("Je n'aime plus (" + votes + ") "); } else { $(this).html('J’aime (' + votes + ')'); } } else { if (votexist == true) { $(this).html("Je n'aime plus"); } else { $(this).html('J’aime'); } } } }); } // for }, click: function(event) { var element = event.currentTarget; // comme this ( et non: event.target ) $(element).unbind('click'); // stopper les multi-clicks $(element).click(function() { return false; }); // blocage du lien $.ajax({ context: element, // $(this) type: 'POST', url: './jaime.php', data: 'click=1&id_mur=' + encodeURIComponent($(element).attr('id')), success: function(data) { var votes = parseInt(data); var votexist = isNaN(data); if(votes > 0) { if (votexist == true) { $(this).html('vous aimez ça (' + votes + ') '); $(element).unbind('click'); } else { $(this).html('J’aime (' + votes + ')'); $(element).unbind('click'); } } else { if (votexist == true) { $(this).html('vous aimez ça'); $(element).unbind('click'); } else { $(this).html('J’aime'); $(element).unbind('click'); } } $(this).animate({'opacity':1}, {'duration':'slow'}); }, error: function() { alert('Une erreur s\'est produite, merci de recharger votre page'); } }); return false; } }; $(document).ready(function() { JaimeWall.evenements(); JaimeWall.precharger(); }); [/code] je vois pas tres bien comment je pourrais intégré sa dans le code que tu ma donnés [code]$(".bcrp_content").append(html).find('button.jaimemur').bind('click', function(){ [code a inséré ?] });[/code]

s4p, il y a 13 ans

A la fin de la fonction success du JaimeWall.click, as-tu essayé de relancer JaimeWall.evenements() ?
Pour empêcher les clicks, qu'il n'y ait pas de nouvelle requête alors que la précédente n'est pas terminée, je met une classe particulière sur l'élément que j'enlève une fois la requête terminée. Comme ça pas d'unbind, la fonction reste en place, il faut juste tester la présence de la classe sur l'élément pour savoir si la requête doit être exécutée ou non.

kaloutch, il y a 13 ans

ok je vais essayer sa merci

kaloutch, il y a 13 ans

bon j'ai essayer sa :

click: function(event) {
        var element = event.currentTarget; // comme this ( et non: event.target )
        $(element).unbind('click'); // stopper les multi-clicks
        $(element).click(function() { return false; }); // blocage du lien

        $.ajax({
            context: element, // $(this)
            type: 'POST',
            url: './jaime.php',
            data: 'click=1&id_mur=' + encodeURIComponent($(element).attr('id')),
            success: function(data) {
                    var votes = parseInt(data);
                    var votexist = isNaN(data);
                    if(votes > 0) {
                        if (votexist == true) {
                            $(this).html('vous aimez ça (' + votes + ') ');
                            $(this).removeClass("jaimemur");
                        } else {
                            $(this).html('J’aime (' + votes + ')');
                            $(this).removeClass("jaimemur");
                        }   
                    } else {
                        if (votexist == true) {
                            $(this).html('vous aimez ça');
                            $(this).removeClass("jaimemur");
                        } else {
                            $(this).html('J’aime');
                            $(this).removeClass("jaimemur");
                        }   
                    }
                $(this).animate({'opacity':1}, {'duration':'slow'});
            },
            error: function() {
                alert('Une erreur s\'est produite, merci de recharger votre page');
            }
        });
        return false;
    }

mais sa ne marche pas avec sa :

$(".bcrp_content").append(html).find('button.jaimemur').bind('click', function(){ JaimeWall.evenements(); JaimeWall.precharger(); });

quand je clique sa fait : j'aime => vous aimez ca => je n'aime plus => j'aime .
chaque seconde sa change

PS : dans ma base de donné la requete est ajouter supprimer entre 5 a 10 fois ( je vois la différence avec l'id auto incrément)

kaloutch, il y a 13 ans

ok si je fais ce code sa marche bien :

$(".bcrp_mur").append(html).find('button.jaimemur').click(JaimeWall.click);

mais comment faire pour precharger chaque bouton "jaime" ?

kaloutch, il y a 13 ans

OUIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII ( dsl c'est tellement bon de trouver ! XD ) donc la solution j'ai utilisé une class "jaimeload" [u]temporaire ![/u] c'est a dire je modifi/regle seulement les nouveaux elements. [u]pour les cliques[/u], c'est simplement affecter a mon bouton "JaimeWall.click" qui est dans *jaime.js* avec "jaimeload" ( pour ne pas remettre en plusieurs fois la fonction sur les anciens bouton j'aime , sinon ca l’exécutera autant que fois que j'aime LOAD les nouvelles infos) [u]pour les préchargement[/u], j'ai réécris la fonction dans le scroll infini avec "jaimeload" et je supprime "jaimeload" quand j''ai fini mes reglage pour que les nouveaux "jaimeload" puissent etre configurer ... je te remercie beaucoup de ton aide s4p. :) js : [code] success: function(html){ if (html){ $(".bcrp_mur").append(html); $(".bcrp_mur").find('button.jaimeload').click(JaimeWall.click); var jaimesload = $(".bcrp_mur").find('button.jaimeload'); for(var i = 0, l = jaimesload.length; i 0) { if (votexist == true) { $(this).html("Je n'aime plus (" + votes + ") "); $(this).removeClass("jaimeload"); } else { $(this).html('J’aime (' + votes + ')'); $(this).removeClass("jaimeload"); } } else { if (votexist == true) { $(this).html("Je n'aime plus"); $(this).removeClass("jaimeload"); } else { $(this).html('J’aime'); $(this).removeClass("jaimeload"); } } } }); } // for } else{ alert('plus rien :('); } } [/code]