2010-11-04 5 views
0

suite sur ce sujet jquery: live() - only lives once? J'ai trouvé le problème dans mon code si j'utilise live() ou bind () - J'ai cette ligne ci-dessous après l'utilisation de la charge(),jquery: live() ou bind() ne fonctionne pas après avoir utilisé load() et renvoie false dedans

$('.disabled').click(function(){return false;}); 

Si je ne l'utilise pas cette ligne, la page sera « retour » le lien dans la balise si je clique sur le bouton. par exemple, c'est le premier bouton (un bouton de lien texte) -

<a href="another_page.php">button 1 </a> 

qu'ai-je fait de mal en ajoutant cette ligne? une idée de comment je peux résoudre ça ...?

ci-dessous est un peu plus de code de cette fonction que je suis en train de résoudre ce problème,

$('.load-item-news:not(.disabled)').bind('click',function(){ 

     ... 

     /* add a .current class to the target item */ 
     $(this).parentsUntil('.column-global').addClass('current'); 

     /* add .disabled class to each a tag in the .current element-div */ 
     $('.current a').addClass('disabled'); 

     ... 

     /* prepend a fresh div */ 
     $('.column-global.right').prepend('<div class="wrapper-item"></div>'); 

     ... 

     var path = $(this).attr('href'); 
     var item_wrapper = $('.wrapper-item'); 

     var array_path = path.split('/'); 
     var pg_url = $(array_path).last()[0]; 

     item_wrapper.load(http_root+rp_template+'item_content_news.php?pg_urlx='+pg_url, function(){ 

      ... 

      $('.disabled').click(function(){return false;}); 
      //$('.current a').click(function(){return false;}); 

     }); 

     return false; 
    }); 

merci.

+0

Je ne suis pas sûr de comprendre le problème. Tout d'abord, je recommande toujours de normaliser le comportement des boutons à travers les navigateurs en faisant $ ('button'). Live ('click', function() {return false;}); Ceci est lié au niveau du document et est toujours déclenché en dernier en raison de la formation d'un événement. Si vous pouviez fournir plus de détails, je serais heureux de vous aider. –

+0

Salut, merci pour la réponse et l'aide. Je l'ai fait réparer maintenant avec la suggestion de T.J. La réponse de Crowder ci-dessous. Merci beaucoup! :-) – laukok

Répondre

1

Lorsque vous faites ceci:

$('.disabled').click(function(){return false;}); 

... vous faites deux choses en retournant false:

  1. vous empêchez la valeur par défaut du navigateur (comme event.preventDefault()), et

  2. Vous empêchez l'événement de bouillir le DOM (comme event.stopPropagation()).

Si vous voulez seulement faire un ou l'autre (comme juste empêcher la valeur par défaut), vous pouvez le faire:

$('.disabled').click(function(event){ event.preventDefault(); }); 

De cette façon, vous empêchez l'action par défaut, mais pas arrêter bouillonnement , et donc tout gestionnaire live que vous avez devrait éventuellement être déclenché.

Mais je me demande si vous voulez vraiment faire cela. Je devine si un lien peut avoir la classe "désactivé", qu'il peut être "activé" parfois? Le simple fait de supprimer la classe "disabled" ne désactivera pas ce gestionnaire de click (cela fait partie de ce que live est pour, gérant les changements pour vous). Par exemple:

$('.disabled').live('click', function(event){ event.preventDefault(); }); 
      // ^^^^^^^^^^^^^-- Note the change 

... dit jQuery que plutôt que de chercher des éléments qui ont vous le voulez pour vérifier la classe « désactivé » maintenant, lorsque le clic se produit et n'exécuter le gestionnaire si les matchs de l'élément à que point dans le temps.

+0

merci pour la réponse et l'explication. maintenant je sais ce que j'ai mal fait. le code fonctionne parfaitement maintenant! Merci beaucoup! :-) – laukok

+0

@lauthiamkok: Cool, heureux que cela a aidé. –

+0

Live lie les gestionnaires au document, donc return false devrait convenir. Comme il n'y a rien à faire passer le document.Une mise en garde, tous les autres gestionnaires liés au niveau du document ne tirera pas pour cet événement. [En fait, je pense que je ne pourrais pas avoir raison/tort, puisque les navigateurs peuvent déclencher des événements dans différents ordres] –

Questions connexes