6

私は世界で最も単純な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']?>">

明らかに、私はここで特別なことをしようとはしていません。過去にも同様のアプローチを使用しましたが、ここで何が欠けているのでしょうか。

4

5 に答える 5

28

つまり、送信ボタンのIDを「送信」とは異なるものに変更します。また、名前をこの値に設定しないでください。

さて、もう少し深い洞察です。一般的なケースはdocument.formname.submit、呼び出されたときにフォームを送信するメソッドです。ただし、あなたの例でdocument.formname.submitは、メソッドではなく、ボタンを表す DOM ノードです。

これは、フォームの要素がnameおよびid属性を介して DOM ノードの属性として利用できるために発生します。この言い回しは少しややこしいので、以下に例を示します。

<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は、「exampleField」という名前のフィールドを表す DOM ノードです。JS を使用して、 value: などのプロパティにアクセスできますdocument.forms.example.exampleField.value

ただし、この例では「submit」というフォームの要素があり、これは でアクセスできる送信ボタンdocument.forms.example.submitです。これにより、フォームを送信できる関数であった以前の値が上書きされます。

編集:

フィールドの名前を変更するのが良くない場合は、別の解決策があります。これを書く少し前に、私はこのサイトに質問を残し、きちんとした JavaScript ハックの形で応答を得ました。

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

JavaScript で HTML フォームを確実に送信する方法を参照してください。完全な詳細については

于 2010-01-04T14:53:16.623 に答える
6

フォームにidとがname定義されている場合、次のいずれかを使用できます。

タグform付きid

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

formタグのname属性を使用して:

document.forms['formname'].submit();
于 2009-06-24T00:20:33.033 に答える
5

これを試して:

fnSubmit()
{
  window.print();
  document.getElementById("formname").submit();
}
于 2009-06-24T00:07:22.573 に答える
0
  1. フォーム内に入力ボタンを配置します。
  2. その上にtabindex="-1"を付けます。
  3. style = "display:none;"を使用して非表示にします。

このような

<input type="submit" tabindex="-1" style="display:none;" />
于 2012-04-02T08:20:21.017 に答える
0

最も可能性の高い原因は、JavaScript 変数、ID、および名前を混乱させる IE です。フォームの名前を共有するものをソースで検索します。

于 2009-06-24T04:08:41.463 に答える