2010-11-12 10 views
0

J'ai un formulaire dans une boucle while en PHP. Il ya action = "javascript: block_grade ($ id)", mais quand je alerte (id) ou alert (lvl) dans la fonction block_grade, je reçois les mêmes numéros de toutes les boucles?jQuery: forme à l'intérieur while loop

Ceci est dans ma boucle:

echo '<form action="javascript:block_grade('.$show['id'].')" method="post">'; 
echo 'Change blockgrade: '; 
echo '<input type="text" name="lvl" size="1" value="'.$show['lvl'].'">'; 
echo '<input type="submit" value="Save">'; 
echo '</form>'; 

Ceci est ma fonction en bas:

<script> 
function block_grade (id) { 
var lvl = $('input[name=lvl]').val(); 
alert(lvl); 
alert(id); 
} 
</script> 

Comment puis-je résoudre ce problème, et est-il un moyen plus efficace que cela, peut-être?

+0

duplication possible de [javascript: Utilisation de la contre-valeur de boucle actuelle dans une fonction() {}?] (Http://stackoverflow.com/questions/3448195/javascript-using-the-current-for- loop-counter-value-inside-a-function) –

+0

@pst Je ne pense pas que cela concerne les fermetures. Plus comme il s'attend à ce que le jQuery sache magiquement l'élément dont il a besoin. – alex

+0

Il passe 'id' en tant que paramètre à' block_grade() '. Aucune magie impliquée. – AndreKR

Répondre

3

Je préférerais que JavaScript attache le gestionnaire d'événements directement et que vous puissiez facilement faire des choses relatives au formulaire.

echo '<input type="text" name="lvl" size="1" value="'.$show['lvl'].'">'; 
echo '<input type="hidden" name="id" size="1" value="'.$show['id'].'">'; 

Puis:

$('form').submit(function() { 
    var id = $(this).find('input[name=id]').val(); 
    var lvl = $(this).find('input[name=lvl]').val(); 
}); 

Entre autres avantages, cela libère la propriété action de sorte que vous pouvez remplir un script qui peut traiter directement cette demande sans JavaScript si nécessaire.

Mais plus au point (de votre question initiale), il assure que vous êtes à la recherche à la correcte champ lvl, et non pas seulement le premier champ lvl jQuery arrive à venir à travers dans les DOM.

+0

Devrais-je avoir mon JS dans la boucle? Sinon, je reçois toujours ces mêmes résultats? Ou est-il un moyen .. – Johnson

+0

Non, que JavaScript est autosuffisant. Vous n'avez besoin d'aucun autre JavaScript sur la page pour que cela fonctionne. Si vous obtenez les mêmes résultats avec cette configuration, quelque chose ne va pas avec votre PHP - il produit les mêmes valeurs pour 'lvl' et' id' pour chaque forme. – VoteyDisciple

+0

Juste vu dans la sortie html (voir la source) Il montre les bonnes valeurs pour id et lvl dans la valeur = "" là. – Johnson

0

Je ne savais même pas qu'il est possible de définir l'action d'un formulaire sur "javascript: ...". J'utilise toujours l'événement onsubmit.

Quoi qu'il en soit, pour lvl il n'est pas étonnant que vous obteniez toujours la même chose parce que val() donne la valeur du premier élément de l'ensemble. L'ensemble contient tous le input s dans toute la page.

Cependant, pour id, vous devriez obtenir la bonne valeur. Peut-être que vous devriez montrer le code HTML final qui est généré.

+0

le html final (source) me donne des résultats justes .. Je crois que c'est parce que le JS est en dehors de la boucle? – Johnson

+0

Non, ça va. Si vous l'appelez comme "block_grade (1)", "block_grade (2)", "block_grade (3)" il devrait alerter "1", "2" puis "3" pour "id". – AndreKR

+0

D'accord, je ne peux toujours pas extraire d'autres valeurs des autres éléments – Johnson