Imaginando, existe uma função em javascript sem jquery ou qualquer estrutura que permita serializar o formulário e acessar a versão serializada?
javascript
forms
serialization
RussellHarrower
fonte
fonte
Respostas:
A biblioteca miniatura de serialização não depende de uma estrutura. Diferente de algo assim, você precisará implementar a função de serialização. (embora com um peso de 1,2 kilobytes, por que não usá-lo?)
fonte
case 'email':
na seção de entrada do códigoThat's an error
Aqui está uma abordagem JavaScript pura:
Embora pareça estar funcionando apenas para solicitações POST.
https://developer.mozilla.org/en-US/docs/Web/API/FormData
fonte
req.open("POST", "<your-url>");
antes.req.send(data);
Caso contrário, eu tive o erroInvalidStateError: XMLHttpRequest state must be OPENED.
no Firefox 66. Ele deve funcionar com outras solicitações também, como PUT, se você substituir POST por PUT.Apenas para navegadores modernos
Se você direcionar navegadores que suportam a
URLSearchParams
API ( navegadores mais recentes ) eFormData(formElement)
construtor ( navegadores mais recentes, exceto o Edge ), use este:Em todos os lugares, exceto no IE
Para navegadores que oferecem suporte,
URLSearchParams
mas não oFormData(formElement)
construtor, use este polyfill FormData e este código (funciona em qualquer lugar, exceto no IE):Exemplo
Mostrar snippet de código
Compatível com IE 10
Para navegadores ainda mais antigos (por exemplo, IE 10), use o polyfill FormData , um
Array.from
polyfill, se necessário, e este código:fonte
.toString()
realmente necessário aqui?URLSearchParams
, então sim. A conversão de sequência também ocorre implicitamente se você interpolar ou adicioná-la a uma sequência. Nesse caso, atoString
chamada explícita não será necessária.new FormData(formElement)
ainda não seja suportado por lá?Fonte: http://code.google.com/p/form-serialize/source/browse/trunk/serialize-0.1.js
fonte
Aqui está uma versão ligeiramente modificada do TibTibs ':
Os campos desativados são descartados e os nomes também são codificados em URL. A substituição da expressão regular de% 20 caracteres ocorre apenas uma vez, antes de retornar a sequência.
A string de consulta está no formato idêntico ao resultado do método $ .serialize () do jQuery.
fonte
form.nodeName.toLowerCase() == "form"
em vez deform.nodeName == "FORM"
Comecei com a resposta de Johndave Decano.
Isso deve corrigir alguns dos problemas mencionados nas respostas à sua função.
Os tipos de botão ainda serão ignorados se não tiverem um valor de nome.
É assim que estou usando atualmente esta função.
fonte
Se você precisar enviar o formulário "myForm" usando o POST no formato json, poderá:
A segunda linha converte a partir de uma matriz como:
... em um objeto regular, como:
... faz essa conversão passando um mapFn para Array.from (). Esse mapFn é aplicado a cada par ["a", "b"] e os converte em {"a": "b"} para que a matriz contenha muitos objetos com apenas uma propriedade em cada. O mapFn está usando "destructuring" para obter nomes da primeira e segunda partes do par e também está usando um "ComputedPropertyName" do ES6 para definir o nome da propriedade no objeto retornado pelo mapFn (é por isso que diz "[ x]: algo "em vez de apenas" x: algo ".
Todos esses objetos de propriedade única são passados para os argumentos da função Object.assign () que mescla todos os objetos de propriedade única em um único objeto que possui todas as propriedades.
Array.from (): https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from
Reestruturação de parâmetros: https://simonsmith.io/destructuring-objects-as-function-parameters-in-es6/
Mais sobre nomes de propriedades calculados aqui: Variável como o nome da propriedade em um literal de objeto JavaScript?
fonte
Funciona em todos os navegadores.
fonte
Para usar assim:
Espero ter ajudado.
fonte
Se você deseja serializar as entradas em um evento. Aqui está uma abordagem JavaScript pura que eu uso.
Os dados serão um objeto JavaScript das entradas.
fonte
Uma versão refatorada do código do @ SimonSteinberger usando menos variáveis e aproveitando a velocidade dos
forEach
loops (que são um pouco mais rápidos quefor
s)fonte
Eu refatorei a resposta do TibTibs para algo muito mais claro de se ler. É um pouco mais longo, devido à largura de 80 caracteres e a alguns comentários.
Além disso, ignora nomes de campos em branco e valores em branco.
fonte
evt = evt || window.event || { target: null };
(como a edição fez) O ponto por trás disso é passar o evento que acionou a serialização, se houver, como um formulário evento "submit" ou "clique" de um botão. Se um formulário tiver vários botões para envio, você só quer contabilizar o valor do botão que acionou o evento e ignorar os outros. Eu cortei juntos um exemplo muito rudimentar deste comportamento em dump.bedmonds.net/serialize-jsfonte
Eu peguei o método entradas () de formData da resposta @moison e do MDN , foi dito que:
mas o único problema é que o navegador móvel (android e safari não são suportados) e o IE e o Safari também
mas basicamente aqui está a minha abordagem:
o código pode ser encontrado aqui
fonte
O uso da função de redução de JavaScript deve ser um truque para todos os navegadores, incluindo o IE9>:
Exemplo ao vivo abaixo.
Mostrar snippet de código
fonte
Eu espero que isso funcione
fonte
Melhorando a resposta de David Lemon.
Isso converte os dados do formulário em JSON e permite definir o formulário a partir de um objeto de dados.
fonte
Isso pode ser feito por uma função muito simples, como segue
fonte
Aqui está uma abordagem JavaScript pura:
fonte
fonte
Para fins de depuração, isso pode ajudá-lo:
fonte
Eu poderia estar louco, mas estou encontrando essas respostas seriamente inchadas. Aqui está a minha solução
fonte
select
, et all