javascript - Obtendo valores de formulários HTML
Como posso obter o valor de um formulário HTML para passar para o JavaScript?
Isso está correto? Meu script recebe dois argumentos, um da caixa de texto e outro da caixa suspensa.
<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>
Resposta #1
Se você quiser recuperar os valores do formulário (tais como aqueles que seriam enviados usando um HTTP POST), você pode usar a classe FormData:
JavaScript
document.getElementById("myForm").addEventListener("submit", function (e) {
e.preventDefault();
var formData = new FormData(form);
// output as an object
console.log(Object.fromEntries(formData));
// ...or iterate through the name-value pairs
for (var pair of formData.entries()) {
console.log(pair[0] + ": " + pair[1]);
}
});
Exemplo: https://codepen.io/kevinfarrugia/pen/Wommgd?editors=1111
Alternativamente, você poderia usar as opções abaixo menos recomendadas:
form-serialize (https://code.google.com/archive/p/form-serialize/)
serialize(document.forms[0]);
jQuery
$("form").serializeArray()
Resposta #2
HTML :
<input type="text" name="name" id="uniqueID" value="value" />
JS :
var nameValue = document.getElementById("uniqueID").value;
Resposta #3
Eu acho que esta é a solução mais elegante
function handleSubmit(e) {
e.preventDefault();
const formData = new FormData(e.target);
const formProps = Object.fromEntries(formData);
}
Resposta #4
Aqui está um exemplo do 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);
}
A demonstração pode ser encontrada aqui.
Resposta #5
document.forms conterá um array de formulários na sua página. Você pode percorrer esses formulários para encontrar o formulário específico que deseja.
var form = false;
var length = document.forms.length;
for(var i = 0; i < length; i++) {
if(form.id == "wanted_id") {
form = document.forms[i];
}
}
Cada formulário possui um array de elementos pelo qual você pode percorrer para encontrar os dados que deseja. Você também deve ser capaz de acessá-los pelo nome.
var wanted_value = form.someFieldName.value;
jsFunction(wanted_value);
Resposta #6
Este é um exemplo desenvolvido de https://stackoverflow.com/a/41262933/2464828
Considerar
<form method="POST" enctype="multipart/form-data" onsubmit="return check(event)">
<input name="formula">
</form>
Vamos assumir que queremos recuperar a entrada de nome formula. Isso pode ser feito passando o event no campo onsubmit. Podemos então usar FormData para recuperar os valores deste formulário exato referenciando o objeto SubmitEvent.
const check = (e) => {
const form = new FormData(e.target);
const formula = form.get("formula");
console.log(formula);
return false
};
O código JavaScript acima então imprimirá o valor da entrada no console.
Se você quiser iterar os valores, ou seja, obter todos os valores, então veja https://developer.mozilla.org/en-US/docs/Web/API/FormData#Methods
Resposta #7
Minha opinião aqui, usando form.elements, que permite consultar cada campo pelo seu name, não apenas por iteração:
const form = document.querySelector('form[name="valform"]');
const ccValidation = form.elements['cctextbox'].value;
const ccType = form.elements['cardtype'].value;
Resposta #8
Uma linha para ES6
getFormData = (selector) => Object.fromEntries(new FormData(document.querySelector(selector)))
console.log('Output of getFormData:')
console.log(getFormData('#myTargetForm'))<!DOCTYPE html>
<html>
<body>
<h2>Get Form Data as Javascript Object</h2>
<form id="myTargetForm">
<label for="fname">First name:</label><br>
<input type="text" id="fname" name="fname" value="John"><br>
<label for="lname">Last name:</label><br>
<input type="text" id="lname" name="lname" value="Doe"><br><br>
<input type="submit" value="Submit">
</form>
</body>
</html>Defina esta função no seu Javascript:
getFormData = (selector) => Object.fromEntries(new FormData(document.querySelector(selector)))
Então basta chamar com qualquer seletor, por exemplo: getFormData('#myTargetForm')
