2017-08-21 2 views
0

J'ai créé un bouton, qui met à jour les valeurs de lui-même, et quand on clique dessus (encore une fois), jquery ne sélectionne pas les valeurs mises à jour ..jquery ne reçoit pas de données mis à jour dynamiquement de bouton

avant la première clic:

<a href="news" data-start="2" data-limit="2" data-page="2" class="btn load-more">Load more</a> 

Le jQuery:

$(document).on('click','.load-more',function(e){ 
     e.preventDefault(); 

     var start = $(this).data('start'), 
      limit = $(this).data('limit'), 
      page = $(this).data('page'), 
      type = $(this).attr('href'); 

     alert(start+' '+limit+' '+page); 

     $.ajax({ 
      url:'/index.php?route=news/news/getnext&start=4&limit=4&page=2', 
      method:'GET', 
      data:{start:start,limit:limit,page:page}, 
      dataType:'json', 
      success:function(data){ 

       .... doing stuff .... 

       if(data.pagination === true){ 
        $('.load-more').attr('data-start',data.start).attr('data-limit',data.limit).attr('data-page',data.next); 
       } else { 
        $('.load-more').fadeOut(250,function(){ 
         $(this).remove(); 
        }); 
       } 

      } 
     })(data); 
    }); 

Cette alerte "2 2 2" comme prévu.

Le bouton mis à jour (après le premier clic):

<a href="news" data-start="4" data-limit="2" data-page="3" class="btn load-more">Load more</a> 

Ensuite, je clique sur le bouton à nouveau, et il avertit encore « 2 2 2 », au lieu de « 4 2 3 », que le bouton a été mis à jour à

Des idées à ce sujet? Je n'arrive pas à le faire fonctionner, j'ai essayé la fonction de base de clic et aussi déléguer mais cela ne fonctionne pas comme prévu.

+1

Comme expliqué dans [la '.data()' documentation] (http://api.jquery.com/data/), « Les attributs sont Data- tiré dans la première fois que la propriété de données est accédée et n'est plus accédé ou muté (toutes les valeurs de données sont ensuite stockées en interne dans jQuery). ". Donc, si vous voulez mettre à jour ces valeurs, utilisez '.data()' pour récupérer * et * définir les valeurs, ou utiliser '.attr()' pour récupérer * et * définir les valeurs. Ne mélangez pas '.data()' et '.attr()'. – nnnnnn

Répondre

1

Après mise à jour du code ci-dessous:

<a href="news" data-start="4" data-limit="2" data-page="3" class="btn load-more">Load more</a> 

    $(document).on('click','.load-more',function(e){ 
    e.preventDefault(); 

    var start = $(this).attr('data-start'); 
     limit = $(this).attr('data-limit'); 
     page = $(this).attr('data-page'); 


    alert(start+' '+limit+' '+page); 
}); 
+0

Merci, ça a marché! Y at-il une raison pour laquelle il n'a pas aimé $ (this) .data ('start') etc? –

+1

Oui parce que vous n'obteniez pas son attribut comme je le fais maintenant. – Aaron

+1

En tout cas merci, si ma réponse est utile que s'il vous plaît marquer cocher là-dessus :) – Aaron