2009-09-30 6 views
1

d'une manière ou d'une autre encore pas en mesure de faire ce que je suis destiné à faire. Il me donne la dernière valeur en boucle sur le clic ne sais pas pourquoi. Ici, je veux la valeur qui a été cliqué.Imprimer la valeur en boucle dans JQuery prêt fonction

Voici mon code:

$(document).ready(function() { 
    var link = $('a[id]').size(); 
    //alert(link); 
    var i=1; 
    while (i<=link) 
    { 
$('#payment_'+i).click(function(){ 
    //alert($("#pro_path_"+i).val()); 
    $.post("<?php echo $base; ?>form/setpropath/", {pro_path: $("#pro_path_"+i).val()}, function(data){ 
    //alert(data); 
    $("#container").html(data);  
    }); 
}); 
i++; 
    } 
}); 

Ici, le placement_1, placement_2 .... sont les href s et la pro_path est la valeur que je veux poster, la valeur est définie dans le type d'entrée cachée avec id comme pro_path_1, pro_path_2, etc. et ici le href s varie pour différents utilisateurs ainsi dans le code j'ai $('a[id]').size(). D'une manière ou d'une autre, quand j'exécute et que j'avertis, j'obtiens la dernière valeur dans la boucle et je ne veux pas ça, ce devrait être cette valeur qui est cliquée.

Je pense onready événement il aurait dû analyser le document et les valeurs à l'intérieur de la boucle Je ne sais pas où je me suis trompé. S'il vous plaît, aidez-moi à obtenir le résultat escompté.

Merci, tous

+0

Je ne vois aucun emplacement_1, emplacement_2 - voulez-vous dire paiement_1, paiement_2? –

+0

oui je veux dire payment_1, payment_2 ... de toute façon j'ai obtenu le soln par karim79 –

Répondre

1

Je suggère d'utiliser le filtre d'attribut startsWith et se débarrasser de la boucle while:

$(document).ready(function() { 
    $('a[id^=payment_]').each(function() { 

     //extract the number from the current id 
     var num = $(this).attr('id').split('_')[1]; 

     $(this).click(function(){  
      $.post("<?php echo $base; ?>form/setpropath/", {pro_path: $("#pro_path_" + num).val()},function(data){ 
       $("#container").html(data);  
      }); 
     }); 
    }); 
}); 
+0

hey merci pour le solun cela a fonctionné comme un charme je n'ai pas eu à un seul changement dans le code ... –

0

Vous devez utiliser une copie locale de i:

$('#payment_'+i).click(function(){ 
    var i = i; // copies global i to local i 
    $.post("<?php echo $base; ?>form/setpropath/", {pro_path: $("#pro_path_"+i).val()}, function(data){ 
     $("#container").html(data); 
    }); 
}); 

Sinon, la fonction de rappel utilisera la i globale.

0

Voici une note sur Asynchronous multiples/simultanées Demandes:

Puisque vous envoyez plusieurs requêtes via AJAX vous devez garder à l'esprit que seulement 2 demandes simultanées sont supportées par les navigateurs.

Il est donc naturel que vous n'obteniez que la réponse de la dernière requête.

+0

Il n'envoie pas de demandes simultanées, mais il lie plutôt plusieurs gestionnaires de clics, chacun avec des paramètres $ .post différents. – karim79

0

si vous avez ajouté une classe à chacun des liens et de faire quelque chose comme ça

$(function() { 
$('.paymentbutton').click(function(e) { 
    $.post("<?php echo $base; ?>form/setpropath/", 
    {pro_path: $(this).val()}, 
    function(data) { 
    $("#container").html(data); 
    }); 
    }); 
}); 
}); 

Note pour obtenir le lien qui a été cliqué sur l'utilisation de $ (ce).

Questions connexes