0

私はバックボーンビューを持っています

"submit": 'handleForms'

そのイベントでハッシュします。

handleForms は次のように定義されます。

handleForms: function(e){
    $(e.target).ajaxSubmit({
        beforeSubmit: function(arr, $form, options){
            console.log('hello');
        }
    });
    return false;
},

私のフォームの 1 つに複数の送信ボタンがあります。

<button type="submit" class="zone Empty" name="zone" value="14"> [14]: Empty </button>

サーバーに送信されるパラメーターに「ゾーン」が表示されません。"Successful Controls" ドキュメント (http://www.w3.org/TR/html401/interact/forms.html#h-17.13.2) の 2 番目の箇条書きによると、zone=14 が送信されると予想されます。

人々がプログラムでフォームを送信している他のSOの質問を見たので、送信値がありませんでしたが、これはボタンのクリックでユーザーが開始しています。

jquery.form はシリアライゼーションにこの値を含めるべきではありませんか? そうする方法はありますか、それともフォーム要素を手で漁る必要がありますか?

4

3 に答える 3

2

問題は、ドキュメントに記載されている jQueryserialize()メソッドに関連しています。

注: 「成功したコントロール」のみが文字列にシリアル化されます。フォームはボタンを使用して送信されていないため、送信ボタンの値はシリアル化されません。

ブラウザのデフォルトの方法では送信されないと言っているのは本当だと思います

http://api.jquery.com/serialize/

送信ごとに非表示フィールドをフォームに追加することで、回避策を作成できます。

beforeSubmit: function(arr, $form, options) {
    $form.find(':submit').each(function() {
        /* check if hasn't been added already on prior submit attempt*/
        if(!$form.find('input[type="hidden"][name = "' + this.name + '"]').length) {
                /* add hidden field*/
            $form.prepend('<input type = "hidden" name = "' + this.name + '" value = "' + this.value + '" / > ');
        }
    })

}

クリックしたボタンのみを送信する編集:

$('#formID :submit').click(function(){
     $('#formID :submit').removeClass('activeButton');
    $(this).addClass('activeButton');
})


beforeSubmit: function(arr, $form, options) {
        $form.find(':submit.activeButton').each(function() {
            /* check if hasn't been added already on prior submit attempt*/
            if(!$form.find('input[type="hidden"][name = "' + this.name + '"]').length) {
                    /* add hidden field*/
                $form.prepend('<input type = "hidden" name = "' + this.name + '" value = "' + this.value + '" / > ');
            }
        })

    }
于 2013-01-02T00:16:01.730 に答える
1

これはどうですか(を含まないbeforeSubmit):

まず、フォーム内に非表示フィールドをハードコーディングします。

<input type="hidden" name="submitType" id="submitType">

次に、 js で:

$form.on('click', "button[type='submit']", function() {
    $("#submitType").val(this.value);
});
于 2013-01-02T04:08:21.153 に答える
0

この問題に対して、対応するinput:hiddenタグがまだ存在しない場合はオンザフライで挿入し、クリックされたbuttonorから値をコピーする、わずかに改善されたコード スニペットがありますinput:submit

メソッドは実行タイミングで安全である必要があります。これは、イベントがへのバブルのSubmit後にトリガーされるためです。Clickdocument

(function($) {
    var btn_selector = "form button, form input:submit";

    function _btn_handler() {
        var jo = $(this),
            jo_form = (jo && jo.closest('form')),
            jo_proxy = (jo_form.length && jo_form.find('input:hidden[name=' + jo.prop('name') + ']'));

        if (typeof jo_proxy == 'object') {
            if (!jo_proxy.length) {
                jo_proxy = $('<input type="hidden" name="'+ jo.prop('name') +'">');
                jo_form.append(jo_proxy);
            }

            jo_proxy.val(jo.prop('value'));
        }
    }
    $(document).off('click', btn_selector, _btn_handler).on('click', btn_selector, _btn_handler);
})(jQuery);
于 2013-03-13T12:27:02.767 に答える