JavaScript - Obtendo valores de formulário HTML


112

Como faço para que o valor de um formulário HTML passe para o JavaScript?

Isso está correto? Meu script usa 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>

2
O que você quer dizer exatamente com "valor de um formulário no código HTML"?
Pekka

7
a questão é bastante clara
laurentngu

1
@laurentngu a questão é que ele quer dizer "um valor de um formulário HTML", ou seja, um valor fora de muitos valores, ou que ele quer dizer o " valor de toda a forma HTML", ou seja, todos os valores em uma grande "serializado "valor
bluejayke

A questão é clara ... mas claramente não faz muito sentido passar o valor de um formulário.
Mateus

Respostas:


112

HTML:

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

JS:

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

7
@ shorty876: Você testou você mesmo? o_0 Essa seria uma boa maneira de determinar se você fez a coisa certa ou não.
Jeff Rupert

1
Sim, mas ele apenas retorna verdadeiro / falso e não tenho certeza de como determinar se a função foi mesmo chamada. Assim, você pode ajudar.
user377419

Tentei fazer isso, mas nameValueé o valor padrão e não o que o usuário inseriu.
James T.

porque nome = "nome", e se não tiver um ID?
bluejayke

65

Se desejar recuperar os valores do formulário (como aqueles que seriam enviados por meio de um HTTP POST), você pode usar:

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
Seu primeiro exemplo em FormDatasi não faz nada ... você ainda precisa obter os valores do formulário.
putvande

1
Eu acredito que isso está incorreto. Se, ao inicializar o FormData, você especificar um elemento do formulário, ele recuperará os valores corretamente. codepen.io/kevinfarrugia/pen/Wommgd
Kevin Farrugia

2
O objeto FormData não é ele mesmo os valores. Você ainda precisa chamar e iterar FormData.entries()para recuperar os valores. Além disso, FormData.entries()não está disponível no Safari, Explorer ou Edge. developer.mozilla.org/en-US/docs/Web/API/FormData
dave

1
Correto em relação à compatibilidade do navegador; no entanto, existem polyfills . Com relação à iteração formData.entries(), depende do que você está procurando. Se você estiver procurando o valor de um único campo, poderá usar formData.get(name). Referência: get () .
Kevin Farrugia

Sim, não consigo FormDataproduzir nada no Chrome.
Atav32

33

Aqui está um exemplo da 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 .


12
Apenas um aviso, se alguém quiser obter os valores selecionados de outros tipos de entradas, como botões de rádio ou caixas de seleção, isso não fará o que você deseja.
Sean

Eu tive que mudar var obj = {};para var obj = [];.
Daniel Williams

@Sean por que não funcionaria com botões de opção? Eles aparecem na propriedade elements também
bluejayke

@bluejayke O código percorrerá todas as entradas do botão de opção e salvará o 'valor' do ÚLTIMO botão de opção obj, independentemente de qual for selecionado. O problema é demonstrado aqui (escolha 'Opção 1') w3schools.com/code/tryit.asp?filename=GEZXJXBBI7AW
Sean

29

document.formsconterá uma variedade de formulários em 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 uma matriz de elementos que 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);

Por que o método mais curto não foi mencionado primeiro? = -D
Klesun

2
@ArturKlesun Acho que é porque na época, uma década atrás, comecei a digitar a resposta, o OP não tinha sido atualizado, então escrevi o loop for para lidar com a maioria das situações. Acho que naquela época eu também estava garantindo a compatibilidade do navegador com o IE7 porque não tínhamos o cenário muito melhor que temos hoje.
Codeacula

5

Meus 5 centavos aqui, usando o form.elementsque permite consultar cada campo por elename , 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;

2

Expandindo a ideia de Atrur Klesun ... você pode acessá-lo apenas pelo nome se usar getElementById para acessar o formulário. Em uma linha:

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

Eu usei assim para botões de rádio e funcionou bem. Eu acho que é o mesmo aqui.


2

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 supor que queremos recuperar a entrada de nome formula. Isso pode ser feito passando o eventem onsubmitcampo. Podemos então usar FormDatapara recuperar os valores desta forma exata referenciando o SubmitEventobjeto.

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

O código JavaScript acima imprimirá o valor da entrada no console.

Se você deseja iterar os valores, ou seja, obter todos os valores, consulte https://developer.mozilla.org/en-US/docs/Web/API/FormData#Methods


Ótimo!. É exatamente disso que preciso. Obrigado.
Dang Cong Duong


1

Tente alterar o código conforme abaixo:

<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>

Obrigado, seu código perfeito e funciona para mim!
LI HO TAN

0

Solução rápida para serializar um formulário sem nenhuma biblioteca

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;
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.