2009-09-03 7 views
0

Considérons le code suivant, en théorie l'événement click doit se lier à chaque élément mais pour une raison quelconque (à mon insu) il se liera uniquement au dernier lien. Quelqu'un a-t-il une idée?

$.each(data, function(i,aitem){ 
linkid = 'address'+i;     
$("#SearchResults").html($("#SearchResults").html()+'<p><a id="'+linkid+'" href="#">'+ aitem.Address +'</a></p>');      
$('#'+linkid).bind("click", function(){ 
    otherfunction(i); 
    return false; 
}); 

});

Répondre

1

essayer:

var linkid = ...; 
var link = $("<a></a>").attr('id', linkid).attr('href', '#').text(aItem.Address).click(function(){ alert('ran'); return false; }); 


$('#SearchResults').append(link.wrap("<p></p>")); 

L'idée étant que vous voulez lier votre événement de clic pour chaque lien que vous créez, donc la chaîne juste à la fin de votre code de création, et être explicite à ce sujet.

Espérons que cela aide.

+0

Merci, ceci l'a réparé! –

1

Qu'en est-il de l'ajout d'un clic-événement en direct?

$("a[id^=address]").live("click", function() { 
    alert("ran"); 
    var value = $(this).attr("id").substr(7); 
    myFunction(value); 
    return false; 
}); 

devrait ajouter un événement de clic à tous les liens (:

modifier: pourboire inclus de Darin ...

+0

Merci pour votre réponse, mais je dois appeler une fonction dans l'événement bind avec la valeur de i dans it, donc itérer les liens après qu'ils ont été affichés n'est pas possible car j'ai besoin de la valeur du résultat dans l'objet json –

+0

J'ai mis à jour l'exemple pour refléter cela –

+1

Autant que je peux voir le "id" de l'élément d'ancrage est construit en concaténant la chaîne "adresse" avec la valeur de "i" de sorte que vous devriez être en mesure d'extraire la valeur de "i" dans le gestionnaire de clics depuis l'identifiant de l'élément. –

0

c'est un problème commun avec les gens qui sont nouveaux à la fermeture.

la bonne solution serait de le faire:

$.each(data, function(i,aitem){ 

    linkid = 'address'+i;         
    $("#SearchResults").html($("#SearchResults").html()+'<p><a id="'+linkid+'" href="#">'+ aitem.Address +'</a></p>');           
    $('#'+linkid).bind("click", function(){ 
    (function(i){ 
     otherfunction(i); 
     return false; 
    }(i)); 
    }); 


}); 
+0

Que fait exactement l'ajout (varname) à la fin d'une paire de parenthèses? –

+0

Merci pour votre réponse mais cela donne le même résultat que ci-dessus, je l'avais précédemment écrit comme ça suite à un article que j'ai trouvé, mais en vain. –

+1

** - 1 ** Cela ne fonctionnera pas. La fonction anonyme interne retournant false ne provoquera pas la fonction anonyme externe à retourner false – Eric

Questions connexes