2009-10-22 6 views
2

J'ai plusieurs formulaires dans DIVS sur ma page.Comment puis-je obtenir des valeurs de plusieurs formulaires et les soumettre?

J'ai une forme qui contient un champ de texte et est toujours visible, et c'est là l'utilisateur clique touche « Entrée » et soumet ...

Je veux obtenir des valeurs sélectionnées dans les autres formes du page, et soumettez-les tous ensemble, pas un par un, afin que mon code PHP puisse utiliser "ALL VALUES" et rechercher une base de données mysql ...

Est-ce possible par javascript en utilisant le "<form onsubmit>" pour appeler un javascript?

tous les codes seraient appréciés ...

grâce

+0

Y at-il une bonne raison de ne pas utiliser un formulaire pour tous les éléments, évitant ainsi la nécessité de ce qui sera inévitablement être un hack laid qui ne fonctionnera pas lorsque les scripts sont désactivés? – NickFitz

Répondre

5

Sans un peu de hocus-pocus Javascript, vous ne pouvez pas. Une forme = une requête.

Vous pouvez le faire avec JS, et vous avez quelques options. Le plus simple serait de parcourir tous les formulaires de la page et, en gros, de dupliquer tous les champs et valeurs d'entrée dans un formulaire, puis de soumettre ce formulaire combiné.

Avec jQuery ce serait quelque chose comme ceci:

$("form").submit(function() { 
    combineAndSendForms(); 
    return false;  // prevent default action 
}); 

function combineAndSendForms() { 
    var $newForm = $("<form></form>") // our new form. 
     .attr({method : "POST", action : ""}) // customise as required 
    ; 
    $(":input:not(:submit, :button)").each(function() { // grab all the useful inputs 
     $newForm.append($("<input type=\"hidden\" />") // create a new hidden field 
      .attr('name', this.name) // with the same name (watch out for duplicates!) 
      .val($(this).val())  // and the same value 
     ); 
    }); 
    $newForm 
     .appendTo(document.body) // not sure if this is needed? 
     .submit()     // submit the form 
    ; 
} 
+0

Quelle est cette méthode appelée, ne peux rien trouver lors de la recherche de google pour "ajouter des données à la forme + javascript" –

2

Vous devez faire un script qui permettra de recueillir les données des formulaires, et les injecter dans la seule forme visible. Un seul formulaire sera soumis, vous ne pouvez pas soumettre plusieurs formulaires. Vous pouvez créer plusieurs champs cachés, ou vous pouvez construire un seul champ caché dans ce formulaire, puis utiliser javascript pour collecter toutes les données des différents formulaires, puis créer une chaîne JSON, définir la valeur de la cachée, et soumettre.

Edit: Supposons que vous avez une seule entrée cachée comme ceci:

<input type='hidden' name='hiddenfield' id='hiddenfield' /> 

vous pouvez utiliser JQuery pour ce faire:

$('#hiddenfield').val('myvalue'); 

Pour obtenir la valeur des autres formes est aussi simple que appeler $ ('# elementid'). val()

avant la soumission du formulaire. Pour utiliser JQuery, accédez au site Web jquery, téléchargez la bibliothèque et liez-la (suivez le guide d'installation).

+0

Comment injecter des valeurs dans un formulaire? –

+1

J'ajoute des champs cachés au formulaire, je devine. –

1

Wrap toute la page dans votre balise de formulaire (si possible) et utiliser le code côté serveur, le long w/Javascript, pour gérer votre règle d'affaires validation. Un peu comme une solution de piratage, mais il devrait minimiser la nécessité de Javascript "hacks" en fonction de votre niveau de compétence avec JavaScript.

+0

J'aime cette solution. Un formulaire avec plusieurs boutons "submit" nommés. Votre script PHP déterminera les champs d'entrée à regarder en fonction du bouton de soumission sélectionné. Le reste est jeté à la "seau-bit" proverbiale. Cela me semble plus propre et plus simple - et donne une bonne séparation de la logique. (La vue peut rester muette) – ChronoFish

1

vous pouvez ajouter un onsubmit à cette forme, et collecter d'autres valeurs avec javascript:

<input type="hidden" name="hidden1" id="hidden1" /> 
<input type="hidden" name="hidden2" id="hidden2" /> 
<script> 
document.getElementById("the_form").onsubmit = function(){ 
    document.getElementById("hidden1").value = document.getElementById("other-field1").value; 
    document.getElementById("hidden2").value = document.getElementById("other-field2").value; 
}; 
</script> 
Questions connexes