質問

世界で最もシンプルなjavascript関数があります:

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

呼び出し元:

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

すべてが順調で、印刷ダイアログが表示されますが、印刷または印刷のキャンセル後に次のエラーが表示されます。

<!> quot; document.formname.submitは関数ではありません<!> quot;

フォームは次のように定義されています:(明らかに、実際のコードではformnameを使用していませんが、アイデアは得られます)

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

明らかにここでは特別なことをしようとしておらず、過去に同様のアプローチを使用しましたが、ここで何が欠けていますか?

役に立ちましたか?

解決

要するに:送信ボタンの id を<!> quot; submit <!> quot;とは異なるものに変更します。また、名前もこの値に設定しないでください。

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

これは、フォームの要素がidおよびdocument.forms.example.exampleField属性を介してその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.valueは<!> quot; exampleField <!> quot;という名前のフィールドを表すDOMノードです。 JSを使用して、値などのプロパティにアクセスできます:document.forms.example.submit

ただし、この例には、<!> quot; submit <!> quot;というフォームの要素があり、これは<=>でアクセスできる送信ボタンです。これにより、以前の値が上書きされます。これは、フォームを送信できる機能でした。

編集:

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

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

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

他のヒント

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

formタグの<=>を使用:

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

<=>タグの<=>属性を使用:

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

これを試してください:

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

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

  1. フォーム内に入力ボタンを配置します。
  2. tabindex = <!> quot; -1 <!> quot;その上。
  3. style = <!> quot; display:none; <!> quot;を使用して非表示にします。

これが好き

<input type="submit" tabindex="-1" style="display:none;" />
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top