JavaScript - Obtention des valeurs de formulaire HTML


112

Comment puis-je faire passer la valeur d'un formulaire HTML à JavaScript?

Est-ce correct? Mon script prend deux arguments, un de la zone de texte, un de la liste déroulante.

<body>
<form name="valform" action="" method="POST">

Credit Card Validation: <input type="text" id="cctextboxid" name="cctextbox"><br/>
Card Type: <select name="cardtype" id="cardtypeid">
  <option value="visa">Visa</option>
  <option value="mastercard">MasterCard</option>
  <option value="discover">Discover</option>
  <option value="amex">Amex</option>
  <option value="diners">Diners Club</option>
</select><br/>
<input type="button" name="submit" value="Verify Credit Card" onclick="isValidCreditCard(document.getElementById('cctextboxid').value,document.getElementById('cardtypeid').value)" />
</body>

2
Qu'entendez-vous exactement par «valeur d'un formulaire en code HTML»?
Pekka

7
la question est assez claire
laurentngu

1
@laurentngu la question est - t - il signifie « une valeur d' un formulaire HTML », ce qui signifie une valeur hors des nombreuses valeurs, ou veut - il dire la « valeur de la totalité du formulaire HTML », ce qui signifie toutes les valeurs dans un grand « sérialisé "value
bluejayke

La question est claire ... mais il est clair que cela n'a pas beaucoup de sens de transmettre la valeur d'un formulaire.
Matthew le

Réponses:


112

HTML:

<input type="text" name="name" id="uniqueID" value="value" />

JS:

var nameValue = document.getElementById("uniqueID").value;

7
@ shorty876: L'avez-vous testé vous-même? o_0 Ce serait une très bonne façon de déterminer si vous l'avez fait correctement.
Jeff Rupert

1
Ouais, mais il renvoie juste un vrai / faux et je ne sais pas comment déterminer si la fonction a même été appelée. Ainsi, vous pouvez aider.
user377419

J'ai essayé cela, mais nameValuec'est la valeur par défaut et non ce que l'utilisateur a entré.
James T.

pourquoi name = "name", et que faire s'il n'a pas du tout d'identifiant?
bluejayke

65

Si vous souhaitez récupérer les valeurs du formulaire (telles que celles qui seraient envoyées à l'aide d'un HTTP POST), vous pouvez utiliser:

JavaScript

const formData = new FormData(document.querySelector('form'))
for (var pair of formData.entries()) {
  // console.log(pair[0] + ': ' + pair[1]);
}

form-serialize ( https://code.google.com/archive/p/form-serialize/ )

serialize(document.forms[0]);

jQuery

$("form").serializeArray()

12
Votre premier exemple FormDatalui-même ne fait rien ... vous devez toujours obtenir les valeurs du formulaire.
putvande

1
Je pense que c'est incorrect. Si lors de l'initialisation de FormData vous spécifiez un élément de formulaire, il récupérera correctement les valeurs. codepen.io/kevinfarrugia/pen/Wommgd
Kevin Farrugia

2
L'objet FormData n'est cependant pas lui-même les valeurs. Vous devez toujours appeler et parcourir FormData.entries()afin de récupérer les valeurs. De plus, FormData.entries()n'est pas disponible dans Safari, Explorer ou Edge. developer.mozilla.org/en-US/docs/Web/API/FormData
dave

1
Correct en ce qui concerne la compatibilité du navigateur, mais il existe des polyfills . En ce qui concerne l'itération formData.entries(), cela dépend de ce que vous recherchez. Si vous recherchez la valeur d'un seul champ, vous pouvez utiliser formData.get(name). Référence: get () .
Kevin Farrugia

Ouais, je ne peux FormDatarien afficher sur Chrome.
Atav32

33

Voici un exemple de W3Schools:

function myFunction() {
    var elements = document.getElementById("myForm").elements;
    var obj ={};
    for(var i = 0 ; i < elements.length ; i++){
        var item = elements.item(i);
        obj[item.name] = item.value;
    }

    document.getElementById("demo").innerHTML = JSON.stringify(obj);
}

La démo peut être trouvée ici .


12
Juste un avertissement, si quelqu'un veut obtenir les valeurs sélectionnées d'autres types d'entrées telles que des boutons radio ou des cases à cocher, cela ne fera pas ce que vous voulez.
Sean

J'ai dû changer var obj = {};pour var obj = [];.
Daniel Williams

@Sean pourquoi ne fonctionnerait-il pas pour les boutons radio? Ils apparaissent également sous la propriété des éléments
bluejayke

@bluejayke Le code parcourra toutes les entrées de bouton radio, et sauvegardera la «valeur» du bouton radio DERNIER contre obj, quel que soit celui qui est sélectionné. Le problème est démontré ici (choisissez 'Option 1') w3schools.com/code/tryit.asp?filename=GEZXJXBBI7AW
Sean

29

document.formscontiendra un tableau de formulaires sur votre page. Vous pouvez parcourir ces formulaires pour trouver la forme spécifique que vous désirez.

var form = false;
var length = document.forms.length;
for(var i = 0; i < length; i++) {
    if(form.id == "wanted_id") {
        form = document.forms[i];
    }
}

Chaque formulaire a un tableau d'éléments que vous pouvez ensuite parcourir pour trouver les données souhaitées. Vous devriez également pouvoir y accéder par nom

var wanted_value = form.someFieldName.value;
jsFunction(wanted_value);

Pourquoi la méthode plus courte n'a pas été mentionnée en premier? = -D
Klesun le

2
@ArturKlesun Je suppose que c'est parce qu'à l'époque, il y a dix ans, j'ai commencé à taper la réponse, l'OP n'avait pas été mis à jour, j'ai donc écrit la boucle for pour gérer la plupart des situations. Je pense qu'à l'époque, j'assurais également la compatibilité du navigateur avec IE7 car nous n'avions pas le paysage bien meilleur que nous avons aujourd'hui.
Codeacula

5

Mes 5 cents ici, en utilisant form.elementsce qui vous permet d'interroger chaque champ par luiname , pas seulement par itération:

const form = document.querySelector('form[name="valform"]');
const ccValidation = form.elements['cctextbox'].value;
const ccType = form.elements['cardtype'].value;

2

Expansion sur l'idée d'Atrur Klesun ... vous pouvez simplement y accéder par son nom si vous utilisez getElementById pour accéder au formulaire. En une seule ligne:

document.getElementById('form_id').elements['select_name'].value;

Je l'ai utilisé comme ça pour les boutons radio et j'ai bien fonctionné. Je suppose que c'est la même chose ici.


2

Ceci est un exemple développé de https://stackoverflow.com/a/41262933/2464828

Considérer

<form method="POST" enctype="multipart/form-data" onsubmit="return check(event)">
    <input name="formula">
</form>

Supposons que nous souhaitons récupérer l'entrée de nom formula. Cela peut être fait en passant le eventsur le onsubmitterrain. On peut ensuite utiliser FormDatapour récupérer les valeurs de cette forme exacte en référençant l' SubmitEventobjet.

const check = (e) => {
    const form = new FormData(e.target);
    const formula = form.get("formula");
    console.log(formula);
    return false
};

Le code JavaScript ci-dessus imprimera alors la valeur de l'entrée dans la console.

Si vous souhaitez itérer les valeurs, c'est-à-dire obtenir toutes les valeurs, consultez https://developer.mozilla.org/en-US/docs/Web/API/FormData#Methods


Génial!. C'est exactement ce dont j'ai besoin. Je vous remercie.
Dang Cong Duong


1

Veuillez essayer de changer le code comme ci-dessous:

<form
   onSubmit={e => {
     e.preventDefault();
     e.stopPropagation();

     const elements = Array.from(e.currentTarget) as HTMLInputElement[];

     const state = elements.reduce((acc, el) => {
       if (el.name) {
         acc[el.name] = el.value;
       }

       return acc;
     }, {});

     console.log(state); // {test: '123'}
   }}
>
   <input name='test' value='123' />
</form>

Merci, votre code parfait et fonctionne pour moi!
LI HO TAN

0

Solution rapide pour sérialiser un formulaire sans aucune bibliothèque

function serializeIt(form) {
  return (
    Array.apply(0, form.elements).map(x => 
      (
        (obj => 
          (
            x.type == "radio" ||
            x.type == "checkbox"
          ) ?
            x.checked ? 
              obj
            : 
              null
          :
            obj
        )(
          {
            [x.name]:x.value
          }
        )
      )
    ).filter(x => x)
  );
}

function whenSubmitted(e) {
  e.preventDefault()
  console.log(
    JSON.stringify(
      serializeIt(document.forms[0]),
      4, 4, 4
    )
  )
}
<form onsubmit="whenSubmitted(event)">
<input type=text name=hiThere value=nothing>
<input type=radio name=okRadioHere value=nothin>
<input type=radio name=okRadioHere1 value=nothinElse>
<input type=radio name=okRadioHere2 value=nothinStill>

<input type=checkbox name=justAcheckBox value=checkin>
<input type=checkbox name=justAcheckBox1 value=checkin1>
<input type=checkbox name=justAcheckBox2 value=checkin2>

<select name=selectingSomething>
<option value="hiThere">Hi</option>
<option value="hiThere1">Hi1</option>
<option value="hiThere2">Hi2</option>
<option value="hiThere3">Hi3</option>
</select>
<input type=submit value="click me!" name=subd>
</form>


-1
<input type="text" id="note_text" />

let value = document.getElementById("note_text").value;
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.