JavaScriptの「送信は関数ではありません」エラー


264

誰かがこのコードの何が問題になっているのか教えてもらえますか?JavaScriptでフォームを送信しようとしましたが、「。submitは関数ではありません」というエラーが表示されました。コードの詳細については、以下を参照してください。

<form action="product.php" method="get" name="frmProduct" id="frmProduct" enctype="multipart/form-data">

<input onclick="submitAction()" id="submit_value" type="button" name="submit_value" value="">

</form>

<script type="text/javascript">
    function submitAction()
    {
        document.frmProduct.submit();
    }
</script>

私もこれを試しました:

<script type="text/javascript">
    function submitAction()
    {
        document.forms["frmProduct"].submit();
    }
</script>

どちらも同じエラーを表示します:(


どのブラウザがこのメッセージを表示しますか?完全なソースを投稿できますか?
harto

投稿されたコードがIE7とChrome2の両方で機能することを考えると、おそらく投稿していないコードに問題がありますか?
Lasse V. Karlsen、

11
おそらく、submitという名前またはidのフィールドがあるため、.submit()はそのフィールドによって隠されていますか?
Lasse V. Karlsen、

このエラーは、異なる要素に同じid = "frmProduct"がある場合に発生しました。
Optimaz ID 2018

回答:


736

送信は機能ではありません

は、送信ボタンまたはその他の要素に名前を付けたことを意味しますsubmit。ボタンの名前をに変更するbtnSubmitと、通話が魔法のように機能します。

ボタンにsubmitという名前を付けるsubmit()と、フォーム上の関数をオーバーライドします。


55
ここに便利なトリックがあります。送信ボタンがのまま#submitになっている場合は、別のフォームインスタンスのsubmit()メソッドを盗むことで回避できますdocument.createElement('form').submit.call(document.frmProduct)。例:
ニールE.ピアソン

35
誰もがこれを難しい方法で学ばなければならないようです。良い面接の質問をしますか
SeanDowney

9
私は単にname = 'submit'を削除し、BobはあなたのAuntyでした!!
zzapper 14

2
驚いたことに、これに遭遇したことはありませんが、悲しいかな、それが問題でした!
natebeaty

3
私はこの問題のために2〜3時間を無駄にしました。回答に感謝します
Mehul Prajapati

12
<form action="product.php" method="post" name="frmProduct" id="frmProduct" enctype="multipart/form-data">

<input id="submit_value" type="button" name="submit_value" value="">

</form>

<script type="text/javascript">

document.getElementById("submit_value").onclick = submitAction;

function submitAction()
{
    document.getElementById("frmProduct").submit();
    return false;
}
</script>

編集:私は誤ってIDを入れ替えました


document.getElementById( "frmProduct")。submitは関数ではありません:(
Jin Yong

1
'frmProduct'というIDを持つ要素が複数ありますか?
tvanfosson 2009年

onActionのハンドラーとしてsubmitActionを追加し、それからsubmitを呼び出すと、無限ループが発生する可能性があります。ハンドラーはボタンのonclickに関連付ける必要があります。
tvanfosson 2009年

1
正確な答えに反対投票ですか?貧しい人たち、あなたがあなたの魂を売っているそれらのポイントを得るために私たちに踏み込んでください
チャド・グラント

@チャドグラント-これ以上同意できませんでした。
Fenton

10

同じ名前のフォームが他にないこと、フォームにname = "submit"またはid = "submit"がないことを確認してください。


9

変更name="submit"する機会がない場合は、次の方法でフォームを送信することもできます。

function submitForm(form) {
    var submitFormFunction = Object.getPrototypeOf(form).submit;
    submitFormFunction.call(form);
}

5
HTMLFormElement.prototype.submit.call(form)また動作します
musa

5

マスターページでを使用してMVCアプリケーションを作成しているときにも同じ問題が発生しました。上記のように「submit」を名前に持つ要素を探してみましたが、そうではありませんでした。

私の場合、ページに複数のタグが作成されたため、正しいフォームを参照する際に問題が発生しました。

これを回避するには、使用するフォームオブジェクトをボタンで処理します。

onclick="return SubmitForm(this.form)"

そしてjsで:

function SubmitForm(frm) {
    frm.submit();
}

3

このトピックにはすでに多くの回答がありますが、私にとって最も効果的だった(そして最も単純な-1行です!)のは、2013年4月21日のNeil E. Pearsonによるコメントの修正です。

送信ボタンが#submitのままになっている場合は、別のフォームインスタンスのsubmit()メソッドを盗むことで回避できます。

彼の方法への私の変更、そして私にとって何がうまくいったか:

document.createElement('form').submit.call(document.getElementById(frmProduct));


2

フォーム要素にsubmitの名前を付けると、submitプロパティが単純にシャドウされます。submitという名前のフォーム要素がないことを確認してください。submit関数には問題なくアクセスできます。


2

実際、解決策は非常に簡単です...

元の:

    <form action="product.php" method="get" name="frmProduct" id="frmProduct"
enctype="multipart/form-data">
    <input onclick="submitAction()" id="submit_value" type="button" 
    name="submit_value" value="">
</form>
<script type="text/javascript">
    function submitAction()
    {
        document.frmProduct.submit();
    }
</script>

解決:

    <form action="product.php" method="get" name="frmProduct" id="frmProduct" 
enctype="multipart/form-data">
</form>

<!-- Place the button here -->
<input onclick="submitAction()" id="submit_value" type="button" 
    name="submit_value" value="">

<script type="text/javascript">
    function submitAction()
    {
        document.frmProduct.submit();
    }
</script>

これがOPの問題をどのように解決するか説明していただけますか。
キングスレー

確かに、この場合(この場合のみ)、問題は範囲です。
Zurc Soirrab

1

このコードを使用する必要があります:

$(document).on("ready", function () {
       
        document.frmProduct.submit();
    });


このコードスニペットは問題を解決する可能性がありますが、説明を含めると、投稿の品質を向上させるのに役立ちます。あなたは将来の読者のための質問に答えていることを覚えておいてください、そしてそれらの人々はあなたのコード提案の理由を知らないかもしれません。また、コードと説明コメントを混同しないようにしてください。これにより、コードと説明の両方が読みにくくなります。
Filnor、

0

私が使ったのは

var enviar = document.getElementById("enviar");
enviar.type = "submit"; 

他のすべてが機能しなかったからといって。


0

私の解決策は、ボタンの「フォーム」属性を設定することでした

<form id="form_id_name"><button name="btnSubmit" form="form_id_name" /></form>

またはjsです:

YOURFORMOBJ.getElementsByTagName("button")[0].setAttribute("form", "form_id_name");
YOURFORMOBJ.submit();

0

考えられる解決策
-1.name/idがsubmitである他の要素がないことを確認します。
2.関数をonClick = "return submitAction();"
3 として呼び出します。document.getElementById("form-name").submit();


-1

あなたが試すことができます

<form action="product.php" method="get" name="frmProduct" id="frmProduct" enctype="multipart/form-data">

<input onclick="submitAction(this)" id="submit_value" type="button" name="submit_value" value="">

</form>

<script type="text/javascript">
function submitAction(element)
{
    element.form.submit();
}
</script>

同じ名前のフォームが複数ありませんか?


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.