2009-10-12 6 views
1

Je crée une petite fonction d'info-bulle dynamique.Pourquoi mon sélecteur jquery ne fonctionne-t-il pas ici?

Fondamentalement, si j'ai un lien comme ceci:

<a href="#" data="xyz">?</a> 

En utilisant Qtip, je tente de rechercher une table d'info-bulle dans mysql et récupérer la pointe sur la base des données de l'attribut de données.

Alors:

$('a[data]').qtip({ 
    content: { 
     url: '/tooltip.php', 
     data: { tipKey: $(this).attr('data') }, 
     method: 'post' 
} 
}); 

Le problème est, il ne fonctionne pas. $ (this) .attr ('data') ne semble pas tirer la valeur à l'intérieur de l'attribut.

Si je modifie manuellement la fonction afin qu'elle ressemble à ce qui suit, cela ne pose aucun problème. Que dois-je faire lorsque j'essaie d'extraire les données de l'attribut de données? Que dois-je faire? Dois-je faire quelque chose comme:

$('a[data]').qtip({ 
    content: { 
     url: '/tooltip.php', 
     data: { tipKey: ''+$(this).attr('data')+'' }, 
     method: 'post' 
    } 

}); 

Comme cela ne donne pas non plus la valeur!

Répondre

4

Votre code ne fonctionne pas car le mot clé this représente le contexte de la fonction en cours d'exécution et vous l'utilisez dans un littéral d'objet. Par exemple, si vous exécutez votre extrait dans l'événement $(document).ready, le mot clé this représentera l'élément de document.

Vous pouvez iterate sur votre sélecteur et initialiser chaque élément individuellement infobulle:

$('a[data]').each(function() { 
    var $link = $(this); 
    $link.qtip({ 
     content: { 
     url: '/tooltip.php', 
     data: { tipKey: $link.attr('data') }, 
     method: 'post' 
     } 
    }); 
}); 

Notez également que l'attribut data n'est pas standard, votre page ne passerez pas le W3C Validator.

+0

merci tas CMS ... je suis passé de «données» à «titre» et votre solution a travaillé un régal. – willdanceforfun

1

Cet exemple fonctionne pour moi:

<html> 
<head> 
<title>Text</title> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
<script type="text/javascript"> 
$(function() { 
    alert($("a[data]").text()); 
}); 
</script> 
</head> 
<body> 
<a href="#" data="123">abc</a> 
</body> 
</html> 
+2

Eh bien, il cherche à obtenir l'attribut, pas le texte du lien, n'est-ce pas? – AlbertoPL

+0

Correct Alberto ... l'attr n'est pas la substance entre les willdanceforfun

1

Vous devriez essayer d'accéder à l'élément 0e des données. Comme ceci:

data: { tipKey: $("a[data]")[0].data}, 

EDIT: Oh ok, je vois, cela devrait fonctionner alors comme une alternative.

+0

hmmm ... j'espérais que cela fonctionnerait mais il n'a pas: | – willdanceforfun

Questions connexes