質問
世界で最もシンプルな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);
}
他のヒント
フォームにid
とname
の両方が定義されている場合、次のいずれかを使用できます。
form
タグの<=>を使用:
document.getElementById('formname').submit();
<=>タグの<=>属性を使用:
document.forms['formname'].submit();
これを試してください:
fnSubmit()
{
window.print();
document.getElementById("formname").submit();
}
最も可能性の高い犯人は、IEがJavaScriptの変数、ID、および名前を混乱させることです。ソースでフォームの名前を共有するものを検索します。
- フォーム内に入力ボタンを配置します。
- tabindex = <!> quot; -1 <!> quot;その上。
- style = <!> quot; display:none; <!> quot;を使用して非表示にします。
これが好き
<input type="submit" tabindex="-1" style="display:none;" />