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?

Foi útil?

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.

  1. Coloque um botão de entrada dentro do seu formulário.
  2. Dar tabindex = "- 1". Nele
  3. Faça-o invisível usando style = "display: none;".

Like This

<input type="submit" tabindex="-1" style="display:none;" />
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top