2010-02-09 4 views
0

Je suis tombé sur un problème étrange avec les balises d'ancrage html. J'ai une balise d'ancrage sur la page html et en cliquant sur la balise «a», il est censé me donner un message d'alerte. Cela fonctionne bien. Mais, si j'ajoute une nouvelle balise «a» en utilisant jquery à la page html et que le clic sur cette balise «a» ajoutée ne fonctionne pas. J'ai été capable de donner href, cible bla bla bla à la balise "a" ajoutée mais .. la fonction onlick ne fonctionne pas. Des pensées ???html ancre tag onclick problèmes!

Merci d'avance.

+0

Comment attachez-vous le gestionnaire à l'événement onclick? – Locksfree

+3

Du code devrait être inclus ici. –

Répondre

1

Dans jQuery, vous utilisez généralement la fonction .click() sur un sélecteur pour définir le gestionnaire de clic. Notez que si plusieurs éléments correspondent au sélecteur, le gestionnaire de clics sera installé sur plusieurs éléments.

Voici un extrait de code trivial qui devrait faire ce que vous voulez:

<html> 
    <head> 
     <script type="text/javascript" src="jquery.js"></script> 
    </head> 
    <body> 
     <script type="text/javascript"> 

     function addLink(label, msg) { 
      /* Create link element. 
       The href="#" makes the link act like a link 
       (be highlighted, selectable, etc.). 
       The onClick="return false;" keeps the link from 
       scrolling the browser to the top of the page. 
       The onClick is not interfered with by jQuery's 
       .click() . */ 
      var link = $('<a href="#" onClick="return false;">' + label + '</a>'); 

      /* Install click handler. */ 
      function clicked_handler() { 
       alert(msg); 
      } 
      link.click(clicked_handler); 

      /* Add the link to the body. */ 
      $('body').append(link); 
     } 

     addLink('Link 1', 'You clicked link 1'); 
     $('body').append('<br/>'); 
     addLink('Link 2', 'You clicked link 2'); 

     </script> 
    </body> 
</html> 
+0

Cela fonctionne .. Merci beaucoup Adams ... – bluwater2001

0

Votre question n'est pas claire.

Je suppose que vous ajoutez un gestionnaire de clic aux balises <a> en écrivant $('a.whatever').click(function() { ... }), puis en ajoutant de nouvelles balises <a> au document.

Lorsque vous écrivez $(...).click(...), il ajoute uniquement des gestionnaires aux éléments qui ont été trouvés par le $(...) au moment de l'ajout du gestionnaire. Cela ne s'appliquera pas aux éléments que vous ajouterez plus tard.

Vous êtes probablement pour la méthode live jQuery, qui va gérer un événement pour tous les éléments qui correspondent à un sélecteur, peu importe quand ils ont été créés.

Par exemple:

$('a.whatever').live('click', function(e) { ... }); 
+0

Merci beaucoup pour votre réponse SLaks. La solution d'Adams a fonctionné pour moi .. Veuillez défiler vers le bas pour voir la réponse. .Live est aussi une meilleure option à utiliser mais..J'ai tellement de scripts Jquery dans ma solution et il y a un conflit (encore je dois comprendre d'où il vient) et il ne reconnaît pas .live comme une fonction et il lance des erreurs. Le travail autour de la solution par Adams est bon. S'il vous plaît vérifier que si possible. Merci. – bluwater2001

0

Essayez d'utiliser ceci:

$("a").live("click", function(){ 
alert("Tadah!"); 
}); 
+0

Merci beaucoup pour votre réponse Mike. La solution de travail d'Adams a fonctionné pour moi. – bluwater2001

0

Ajout d'un événement fonctionne sur des choses qui est déjà sur la page. Si vous ajoutez quelque chose aferwards Vous devez lier un nouveau clic eventto cette nouvelle chose ou utiliser en direct, ce qui devrait toujours être la deuxième option

donc au lieu de faire

$(something).append('<a href="" etc. '); 

essayer quelque chose comme ça

$('<a></a>').attr('href','some url here').bind('click',function(){}).appendTo('body'); 
+0

Merci beaucoup pour votre réponse naugtur. La solution d'Adams a fonctionné pour moi .. Veuillez défiler vers le bas pour voir la réponse. – bluwater2001