Pregunta

Tengo los mundos más simple de la función javascript:

fnSubmit()
{
  window.print();
  document.formname.submit();
}

El que es llamado por:

<button type="button" id="submit" onclick="fnSubmit()">Submit</button>

Todo está bien, y bueno, el cuadro de diálogo imprimir muestra, sin embargo después de la impresión o la cancelación de la impresión me da el siguiente error:

"el documento.nombreformulario.presentar no es una función"

Mi formulario se define como sigue:(obviamente no estoy utilizando formname en el código real, pero usted consigue la idea)

<form name="formname" id="formname" method="post" action="<?=$_SERVER['SCRIPT_NAME']?>">

Obviamente, yo no estoy tratando de hacer algo especial aquí y he utilizado enfoques similares en el pasado, lo que en el mundo que me estoy perdiendo aquí?

¿Fue útil?

Solución

En resumen:cambiar el id de su botón de enviar a algo distinto a "enviar".Además, no establece la nombre a este valor.

Ahora, algunos penetración más profunda.El caso general es que document.formname.submit es un método que, cuando recibe una llamada, se envía el formulario.Sin embargo, en tu ejemplo, document.formname.submit no es un método, sino más bien el DOM nodo que representa el botón.

Esto sucede debido a que los elementos de un formulario están disponibles como atributos de su nodo DOM, a través de su name y id los atributos.Esta redacción es un poco confuso, así que aquí viene un ejemplo:

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

En este ejemplo, document.forms.example.exampleField es un DOM nodo que representa al campo con el nombre de "exampleField".Usted puede utilizar JS para acceder a sus propiedades, tales como su valor: document.forms.example.exampleField.value.

Sin embargo, en este ejemplo, no es un elemento de un formulario que se llama "enviar", y este es el botón de enviar, la cual se puede acceder con document.forms.example.submit.Esto sobrescribe el valor anterior, que era la función que permite enviar el formulario.

EDITAR:

Si cambia el nombre del campo no es buena para ti, no hay otra solución.Poco antes de escribir esto, me dejó la pregunta en el sitio y tuvo una respuesta en la forma de un puro JavaScript hack:

function hack() {
  var form = document.createElement("form");
  var myForm = document.example;
  form.submit.apply(myForm);
}

Ver Cómo confiable de enviar un formulario HTML con JavaScript? para los detalles completos

Otros consejos

Dado que su forma tiene una id y un name definido, puede usar uno de estos:

Con el form la etiqueta id:

document.getElementById('formname').submit();

Con el form la etiqueta name atributo:

document.forms['formname'].submit();

Prueba esto:

fnSubmit()
{
  window.print();
  document.getElementById("formname").submit();
}

El culpable más probable es que IE confunda variables, identificadores y nombres de JavaScript. Busque en su fuente algo que comparta el nombre de su formulario.

  1. Coloque un botón de entrada dentro de su formulario.
  2. Give tabindex = " -1 " en ella.
  3. Hazlo invisible usando style = " display: none; " ;.

Me gusta esto

<input type="submit" tabindex="-1" style="display:none;" />
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top