6

アプリの構築に Jquery とバックボーンを使用しています。最近、require.js を使用して AMD アーキテクチャのプロジェクトを書き直しました。その後、フォームの投稿に関する問題が発生します。これは私のフォームです:

*<div data-role="page" id="login" data-theme="a">
    <form class="loginPageForm">
        <div data-role="content" style="padding: 15px">
            <h3 id="login_heading">
                Login
            </h3>
            <div data-role="fieldcontain">
                <fieldset data-role="controlgroup" id="email_fieldset">
                    <label for="email_textinput" >
                        Email
                    </label>
                    <input id="email_textinput" placeholder="john@doe.com" value="" type="text" />
                </fieldset>
            </div>
            <div data-role="fieldcontain">
                <fieldset data-role="controlgroup" id="password_fieldset">
                    <label for="password_textinput">
                        Password
                    </label>
                    <input id="password_textinput" placeholder="Secret Password" value="" type="password" />
                </fieldset>
            </div>
            <input type="submit" class="btn" value="Login"/>
            <a data-role="button" data-transition="none" data-theme="f" href="#register" id="registerButton">Register</a>
        </div>
    </form>
</div>*  

そして私は使用しています:

  **$.fn.serializeObject = function(){
            var arrayData, objectData;
            arrayData = $(this).serializeArray();
            objectData = {};
            $.each(arrayData, function() {
                var value;

                if (this.value != null) {
                    value = this.value;
                } else {
                    value = '';
                }

                if (objectData[this.name] != null) {
                    if (!objectData[this.name].push) {
                        objectData[this.name] = [objectData[this.name]];
                    }

                    objectData[this.name].push(value);
                } else {
                    objectData[this.name] = value;
                }
            });

            return objectData;
        }**

Jsonを作成するため..問題は $(this).serializeArray(); の行です。空の配列を返します: $(this).serializeArray(): Array[0] length: 0 proto : Array[0]

私のオブジェクト「これ」は次のようになります。

arrayData: Array[0]
objectData: undefined
this: v.fn.v.init[1]
0: form.loginPageForm
0: fieldset#email_fieldset
1: input#email_textinput
2: fieldset#password_fieldset
3: input#password_textinput
4: input.btn

この問題を回避する方法を知っていますか? AMD アーキテクチャーで遊ぶ前に、このフォームは機能しますか?

4

1 に答える 1

16

フォーム要素に name 属性がありません。フォームを送信すると、要素の値がその名前をキーとしてサーバーに送信されます。だから名前は大事。

jQuery serializeArray Docsによると

.serializeArray() メソッドは、制御を成功させるための標準 W3C ルールを使用して、含める要素を決定します。特に、要素を無効にすることはできず、name 属性を含める必要があります。フォームはボタンを使用して送信されていないため、送信ボタンの値はシリアル化されません。ファイル選択要素からのデータはシリアル化されません。

于 2013-02-15T03:17:28.187 に答える