web-dev-qa-db-ja.com

JavaScript form.submit()がFirefoxで機能しない

これにはいくつかの質問/回答があります herehere および here と他の場所にありますが、すべてJQuery固有であるように見え、適用されていないようですthis(たとえば、私は[〜#〜] not [〜#〜]で新しいFormオブジェクトを作成していますが、これはドキュメント内の既存のフォームです。また、私はJQueryをまったく使用していない[〜#〜] [〜#〜])。

IE7との互換性のため、送信前に変更する必要があるフォームがあります。フォームからすべてのBUTTONタグを取り除き、非表示フィールドを追加する必要がありますが、これはすべて既存のHTMLページの既存のフォームにあります。このコードはIEおよびChromeで正常に機能しますが、Firefoxでは機能しません(バージョン23および24の両方がテスト済み))。

_    buttonClickFunction(formName, buttonObject) {
        var formObject = document.forms[formName];
        var i = 0;

        // Strip out BUTTON objects
        for (i=0;i<formObject.length;i++) {
            if (formObject[i].tagName === 'BUTTON') {
                formObject[i].parentNode.removeChild(formObject[i]);
                i--;
            }
        }

        // Create new field
        var newField = document.createElement('input');
        newField.type = 'hidden';
        newField.id=buttonObject.id;
        newField.name = buttonObject.name;
        if (buttonObject.attributes['value'] != null) {
            newField.value = buttonObject.attributes['value'].value;
        } else {
            newField.value = buttonObject.value;
        }

        // Submit form
        formObject.appendChild(newField);
        document.forms[formName].appendChild(newField);
        document.forms[formName].submit();
    }
_

document.forms[formName].submit()に加えて、formObject.submit()も試してみました-両方ともChrome=で機能しますが、Firefoxでは両方とも失敗します。これが機能しない理由-私はJSをたどって、document.forms[formName].submit() executeが実行されるのを見ました-例外は表示されませんが、サーバーには何も送信されません。

Firefoxがこのフォームを送信しない理由と、それを修正する方法を誰かが特定できますか?

17
user3120173

Firefoxは、フォームを送信するときに、少なくとも送信ボタンが利用可能であることを期待しています。つまり、次のようなものがあるはずです。

<button type="submit">Click me</button>

または:

<input type="submit" value="Click me" />

コードで最初のボタンを使用すると、機能しません(フォームを送信する前にすべてのボタンを削除するため)。 2番目のオプションを使用すると、Firefoxでも機能します。このフィドルでわかるように、 http://jsfiddle.net/q9Dzc/1/

21
g00glen00b

form.submit()がFirefoxでは機能せず、他のブラウザでは機能する場合も、同様の動作がありました。フォーム内のすべてのボタンにtype="button"が含まれていることを確認してください。

1
Simonas

後でページの場所を変更/再読み込みしてFirefoxを送信する際に問題が発生する場合は、リダイレクトコードを$ .postコールバックに配置する必要があります。

$(".form").submit(function(e){
    e.preventDefault();
    $.post("submit.php", {data: textData}, function(){
        history.go(-1);
    });
    return false;
});
0
SamJakob