2

以下に示すように、Ajax GETリクエストがあります

$(document).ready(function() {
    $('#comment-edit-form').submit(function() {
        $.ajax({
            type: $(this).attr('method'),
            url: '/comments/edit/' + $(this).attr('comment_pk') + '/',
            data: $(this).serialize(),
            success: function(data){}
        });
        return false;
    });
});

形はこんな感じ

<form method="get" id="comment-edit-form">
..

<input class="btn btn-primary" type="submit" name="preview" value="Preview">
<input class="btn btn-primary" type="submit" name="submit" value="Submit">

</form>

このフォームには、2 つの異なる送信ボタンがあります。それぞれ操作が違います!

トレースした GET リクエスト URL は次のようなものです

?input1=1&input2=2...

期待し?input1=1&input2=2&submit= たり?input1=1&input2=2&preview=

リクエストで「送信」または「プレビュー」の名前を確認できないのはなぜですか??

4

1 に答える 1

3

これは、jQueryが nodeTypesinput, select, textarea and keygenではない入力タイプのみをシリアル化するためsubmit,button, image, file or resetです。

jQuery ソース コードを見ると、フォーム要素の入力型が次の正規表現に対してチェックされていることがわかります。

 /^(?:submit|button|image|reset|file)$/i

このチェックは、コード内.serializeArrayで呼び出され.serializeます。


興味のある読者のために - これは完全なフィルターです:

return this.name &&  // has a name
       !jQuery(this).is(":disabled") &&  // is not a disabled input
       rsubmittable.test(this.nodeName) && // is either input, select,textarea or keygen 
       !rsubmitterTypes.test(type) && // the test explained above
       (this.checked || !manipulation_rcheckableType.test(type)); // checked
于 2013-07-07T22:12:02.973 に答える