Formar a não apresentação com JS
-
10-07-2019 - |
Pergunta
Eu tenho a função javascript mundos mais simples:
fnSubmit()
{
window.print();
document.formname.submit();
}
O que é chamada por:
<button type="button" id="submit" onclick="fnSubmit()">Submit</button>
Tudo está bem e bom, os shows de diálogo de impressão para cima, no entanto após a impressão ou cancelar a impressão eu recebo o seguinte erro:
"document.formname.submit não é uma função"
Meu formulário é definido da seguinte forma: (obviamente eu não estou usando formname no código real, mas você começa a idéia)
<form name="formname" id="formname" method="post" action="<?=$_SERVER['SCRIPT_NAME']?>">
Obviamente eu não estou tentando fazer nada de especial aqui e eu usei abordagens semelhantes no passado, o que no mundo eu falto aqui?
Solução
Em suma: mudar o id do seu botão enviar para diferentes algo que "enviar". Além disso, não defina o nome para este valor também.
Agora, alguns visão mais profunda. O caso geral é que document.formname.submit
é um método que, quando chamado, irá enviar o formulário. No entanto, no seu exemplo, document.formname.submit
não é um método mais, mas o nó DOM representando o botão.
Isso acontece porque os elementos de um formulário estão disponíveis como atributos de seu nó DOM, através de seus atributos name
e id
. Esta formulação é um pouco confuso, então aqui vem um exemplo:
<form name="example" id="example" action="/">
<input type="text" name="exampleField" />
<button type="button" name="submit" onclick="document.example.submit(); return false;">Submit</button>
</form>
Nesta exemplo, document.forms.example.exampleField
é um nó DOM representando o campo com o nome "exampleField". Você pode usar JS para acessar suas propriedades, tais como o seu valor:. document.forms.example.exampleField.value
No entanto, neste exemplo, há um elemento do formulário chamado "enviar", e este é o botão, que pode ser acessado com document.forms.example.submit
enviar. Isto substitui o valor anterior, que era a função que lhe permite enviar o formulário.
EDIT:
Se renomear o campo não é bom para você, não há outra solução. Pouco antes de escrever isso, eu deixou a pergunta no site e com uma resposta na forma de um hack JavaScript puro:
function hack() {
var form = document.createElement("form");
var myForm = document.example;
form.submit.apply(myForm);
}
Como enviar de forma confiável um formulário HTML com JavaScript? para detalhes completos
Outras dicas
Uma vez que o formulário tem tanto um id
e uma name
definido, você pode usar qualquer um destes:
Com form
do tag id
:
document.getElementById('formname').submit();
Com atributo form
do tag name
:
document.forms['formname'].submit();
Tente isto:
fnSubmit()
{
window.print();
document.getElementById("formname").submit();
}
O culpado mais provável é IE confundir variáveis ??JavaScript, ids, e nomes. Pesquisar em sua fonte para algo compartilhar o nome do seu formulário.
- Coloque um botão de entrada dentro do seu formulário.
- Dar tabindex = "- 1". Nele
- Faça-o invisível usando style = "display: none;".
Like This
<input type="submit" tabindex="-1" style="display:none;" />