Estou escrevendo um javascript (um greasemonkey / userscript) que irá inserir alguns campos de entrada em um formulário em um site.
Acontece que não quero que esses campos de entrada afetem o formulário de forma alguma, não quero que eles sejam enviados quando o formulário for enviado, só quero que meu javascript tenha acesso aos seus valores.
Existe alguma maneira de adicionar alguns campos de entrada no meio de um formulário e não tê-los enviados quando o formulário for enviado?
Obviamente, o ideal seria que os campos de entrada não estivessem no elemento do formulário, mas eu quero que o layout da minha página resultante tenha os campos de entrada inseridos entre os elementos do formulário original.
javascript
html
forms
userscripts
Bolota
fonte
fonte
Respostas:
Você pode inserir campos de entrada sem o atributo "nome":
Ou você pode simplesmente removê-los assim que o formulário for enviado (em
jQuery
):fonte
A coisa mais fácil a fazer seria inserir os elementos com o
disabled
atributo.Dessa forma, você ainda pode acessá-los como filhos do formulário.
Os campos desabilitados têm a desvantagem de que o usuário não pode interagir com eles de forma alguma - então, se você tiver um
disabled
campo de texto, o usuário não poderá selecionar o texto. Se você tiver umadisabled
caixa de seleção, o usuário não poderá alterar seu estado.Você também pode escrever algum javascript para disparar no envio do formulário para remover os campos que não deseja enviar.
fonte
name
propriedade, que talvez queira manter se quiser usá-la mais tarde.name
atributos.Simples tente remover o atributo de nome do elemento de entrada.
Então tem que parecer
fonte
Eu só queria adicionar uma opção adicional: Em sua entrada, adicione a tag do formulário e especifique o nome de um formulário que não existe em sua página:
fonte
fakeForm
outro lugar (não há necessidade de enviar), isso resulta em HTML inválido.Você pode escrever um manipulador de eventos para
onsubmit
remover oname
atributo de todos os campos de entrada que você deseja que não sejam incluídos no envio do formulário.Aqui está um exemplo rápido não testado:
fonte
Sei que esta postagem é antiga, mas responderei mesmo assim. A maneira mais fácil / melhor que encontrei é simplesmente definir o nome como em branco.
Coloque isso antes de enviar:
Em suma, sua função de envio pode ter a seguinte aparência:
Isso ainda enviará o formulário com todos os seus outros campos, mas não enviará aquele sem um nome.
fonte
Adicionar disabled = "disabled" na entrada e enquanto o jquery remove o atributo disabled quando você deseja enviá-lo usando .removeAttr ('disabled')
HTML:
<input type="hidden" name="test" value="test" disabled='disabled'/>
jquery:
$("input[name='test']").removeAttr('disabled');
fonte
Todas as respostas acima já disseram tudo sobre (não) nomear os controles do formulário ou removê-los programaticamente antes de realmente enviar o formulário.
Embora, em minha pesquisa, eu encontrei outra solução que não vi mencionada neste post:
Se você encapsular os controles do formulário que deseja que não sejam processados / não sejam enviados, dentro de outra
<form>
tag semmethod
atributo nempath
(e obviamente sem controle de tipo de envio como um botão ou enviar entrada aninhada nele), o envio do formulário pai não incluirá esses controles de formulário encapsulados.O valor de controle [name = "notSent"] não será processado nem enviado ao terminal POST do servidor, mas o de [name = "sent"] será.
Esta solução pode ser anedótica, mas ainda estou deixando para a posteridade ...
fonte
Manipule o envio do formulário em uma função por meio de onSubmit () e execute algo como a seguir para remover o elemento do formulário: Use
getElementById()
o DOM e, em seguida, use[object].parentNode.removeChild([object])
suponha que seu campo em questão tenha um código de atributo de id "my_removable_field":
Isso lhe dará exatamente o que você está procurando.
fonte
Você ainda precisa que eles sejam elementos de entrada em primeiro lugar? Você pode usar o Javascript para criar dinamicamente divs ou parágrafos ou itens de lista ou o que quer que contenha as informações que você deseja apresentar.
Mas se o elemento interativo é importante e é um saco colocá-los fora do
<form>
bloco, deve ser possível remover esses elementos do formulário quando a página for enviada.fonte
fonte
Você precisa adicionar o onsubmit ao seu formulário:
E o roteiro será assim:
Isso funciona para mim sempre :)
fonte