Вопрос

У меня есть самая простая в мире функция javascript:

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

Который вызывается:

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

Все в порядке, появляется диалоговое окно печати, однако после печати или ее отмены я получаю следующую ошибку:

«document.formname.submit не является функцией»

Моя форма определяется следующим образом:(очевидно, я не использую имя формы в реальном коде, но вы поняли)

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

Очевидно, я не пытаюсь сделать здесь что-то особенное и использовал подобные подходы в прошлом, чего мне здесь не хватает?

Это было полезно?

Решение

Суммируя:изменить идентификатор вашей кнопки отправки на нечто иное, чем «отправить».Также не устанавливайте имя к этому значению тоже.

Теперь немного более глубокого понимания.Общий случай заключается в том, что document.formname.submit — это метод, который при вызове отправляет форму.Однако в вашем примере document.formname.submit это больше не метод, а узел DOM, представляющий кнопку.

Это происходит потому, что элементы формы доступны как атрибуты ее узла DOM через их name и id атрибуты.Эта формулировка немного сбивает с толку, поэтому вот пример:

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

На этом примере document.forms.example.exampleField — это узел DOM, представляющий поле с именем «exampleField».Вы можете использовать JS для доступа к его свойствам, таким как его значение: document.forms.example.exampleField.value.

Однако в этом примере есть элемент формы под названием «отправить», и это кнопка отправки, доступ к которой можно получить с помощью document.forms.example.submit.Это перезапишет предыдущее значение, которое было функцией, позволяющей отправить форму.

РЕДАКТИРОВАТЬ:

Если переименование поля вам не подходит, есть другое решение.Незадолго до написания этой статьи я оставил вопрос на сайте и получил ответ в виде аккуратного JavaScript-хака:

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

Видеть Как надежно отправить HTML-форму с помощью JavaScript? для получения полной информации

Другие советы

Учитывая, что в вашей форме определены и id, и name, вы можете использовать любой из них:

С тегом form <=>:

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

С атрибутом <=> тега <=>:

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

Попробуйте это:

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

Наиболее вероятный виновник - путаница в IE переменных, идентификаторов и имен JavaScript. Найдите в своем источнике что-то, разделяющее имя вашей формы.

<Ол>
  • Поместите кнопку ввода в форму.
  • Give tabindex = " -1 " на нем.
  • Сделайте его невидимым, используя style = " display: none; ".
  • Нравится это

    <input type="submit" tabindex="-1" style="display:none;" />
    
    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top