JavaScript - Abrufen von HTML-Formularwerten


112

Wie kann ich den Wert eines HTML-Formulars an JavaScript übergeben?

Ist das richtig? Mein Skript verwendet zwei Argumente, eines aus dem Textfeld und eines aus dem Dropdown-Feld.

<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
Was meinen Sie genau mit "Wert eines Formulars im HTML-Code"?
Pekka

7
Frage ist ganz klar
Laurentngu

1
@laurentngu die Frage ist , hat er „einen Mittelwert von einem HTML - Formular“, was bedeutet , ein Wert aus der die vielen Werte, oder er „bedeutet Wert des gesamten HTML - Formular“, alle Werte in einem großen serialisiert Bedeutung“ "Wert
Bluejayke

Die Frage ist klar ... aber es macht natürlich nicht viel Sinn, den Wert eines Formulars weiterzugeben.
Matthew

Antworten:


109

HTML:

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

JS:

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

7
@ shorty876: Hast du es selbst getestet? o_0 Das wäre eine ziemlich gute Methode, um festzustellen, ob Sie es richtig gemacht haben oder nicht.
Jeff Rupert

1
Ja, aber es gibt nur ein wahr / falsch zurück und ich bin nicht sicher, wie ich feststellen soll, ob die Funktion überhaupt aufgerufen wurde. So können Sie helfen.
user377419

Ich habe dies ausprobiert, aber es nameValueist der Standardwert und nicht das, was der Benutzer eingegeben hat.
James T.

warum name = "name" und was ist, wenn es überhaupt keine ID hat?
Bluejayke

65

Wenn Sie die Formularwerte abrufen möchten (z. B. diejenigen, die über einen HTTP-POST gesendet werden), können Sie Folgendes verwenden:

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
Ihr erstes Beispiel FormDataselbst macht nichts. Sie müssen die Werte noch aus dem Formular abrufen.
Putvande

1
Ich glaube das ist falsch. Wenn Sie beim Initialisieren der FormData ein Formularelement angeben, werden die Werte korrekt abgerufen. codepen.io/kevinfarrugia/pen/Wommgd
Kevin Farrugia

2
Das FormData-Objekt selbst ist jedoch nicht der Wert. Sie müssen noch aufrufen und durchlaufen, FormData.entries()um die Werte abzurufen. Darüber hinaus FormData.entries()ist es in Safari, Explorer oder Edge nicht verfügbar. developer.mozilla.org/en-US/docs/Web/API/FormData
Dave

1
Richtig in Bezug auf die Browserkompatibilität, es gibt jedoch Polyfills . In Bezug auf das Durchlaufen formData.entries()hängt es davon ab, wonach Sie suchen. Wenn Sie nach dem Wert eines einzelnen Feldes suchen, können Sie es verwenden formData.get(name). Referenz: get () .
Kevin Farrugia

Ja, ich kann FormDataauf Chrome nichts ausgeben.
Atav32

33

Hier ist ein Beispiel von 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);
}

Die Demo finden Sie hier .


12
Nur eine Warnung: Wenn jemand die ausgewählten Werte anderer Eingabetypen wie Optionsfelder oder Kontrollkästchen abrufen möchte, wird dies nicht das tun, was Sie wollen.
Sean

Ich musste ändern var obj = {};zu var obj = [];.
Daniel Williams

@ Sean warum sollte es nicht für Optionsfelder funktionieren? Sie erscheinen auch unter der Eigenschaft elements
bluejayke

@bluejayke Der Code durchläuft alle Optionsfeldeingaben und speichert den 'Wert' des LETZTEN Optionsfelds objunabhängig davon, welcher ausgewählt ist. Das Problem wird hier demonstriert (wählen Sie 'Option 1'). W3schools.com/code/tryit.asp?filename=GEZXJXBBI7AW
Sean

29

document.formsenthält eine Reihe von Formularen auf Ihrer Seite. Sie können diese Formulare durchlaufen, um das gewünschte Formular zu finden.

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

Jedes Formular verfügt über ein Elementarray, das Sie durchlaufen können, um die gewünschten Daten zu finden. Sie sollten auch über den Namen darauf zugreifen können

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

Warum wurde die kürzere Methode nicht zuerst erwähnt? = -D
Klesun

2
@ArturKlesun Ich denke, das liegt daran, dass ich vor einem Jahrzehnt mit der Eingabe der Antwort begonnen habe und das OP nicht aktualisiert wurde. Deshalb habe ich die for-Schleife geschrieben, um die meisten Situationen zu bewältigen. Ich denke damals habe ich auch die Browserkompatibilität mit IE7 sichergestellt, weil wir nicht die weitaus bessere Landschaft hatten, die wir heute haben.
Codeacula

5

Meine 5 Cent hier, mit form.elementsdenen Sie jedes Feld nach ihmname abfragen können , nicht nur nach Iteration:

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

2

Erweitern Sie die Idee von Atrur Klesun ... Sie können einfach über den Namen darauf zugreifen, wenn Sie getElementById verwenden, um das Formular zu erreichen. In einer Zeile:

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

Ich habe es so für Optionsfelder verwendet und gut funktioniert. Ich denke, hier ist es genauso.



1

Dies ist ein entwickeltes Beispiel für https://stackoverflow.com/a/41262933/2464828

Erwägen

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

Nehmen wir an, wir möchten die Eingabe des Namens abrufen formula. Dies kann durch Übergabe eventdes onsubmitFeldes erfolgen. Wir können dann FormDatadie Werte dieser exakten Form abrufen, indem wir auf das SubmitEventObjekt verweisen .

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

Der obige JavaScript-Code druckt dann den Wert der Eingabe in die Konsole.

Wenn Sie die Werte iterieren möchten, dh alle Werte abrufen möchten, lesen Sie https://developer.mozilla.org/en-US/docs/Web/API/FormData#Methods


0

Schnelle Lösung zum Serialisieren eines Formulars ohne Bibliotheken

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;
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.