0

プラグインは正常に機能しているようです。2つのフィールドを空のままにすると、それらが必須であり、有効な番号である必要があることが通知されます。

私が抱えている問題は、2つのテキストフィールドに正しいデータを入力して追加ボタンを押すと、以下のコードでエラーが発生することです。データは引き続きコントローラーに送信され、追加は実行されますが、エラーセクションからアラートが発生します。

    $(document).ready(function (e) {
            $("#frmOverride").validate({
                rules: {
                    maintenancePercentage: {
                        required: true,
                        number: true
                    },
                    officePercentage: {
                        required: true,
                        number: true
                    }
                }
            });
     }

このセクションは、保存ボタンのクリックイベントにあります。

        var seg1 = dataItem.Seg1_Code;
        var maintPercentage = $("#maintenancePercentage").val();
        var officePercentage = $("#officePercentage").val();

        if ($('#frmOverride').validate().form()) {
            $.ajax({
                type: "POST",
                url: "/PayrollMarkup/AddPayrollMarkupOverride",
                data: {
                    seg1: seg1,
                    maintenancePercentage: maintPercentage,
                    officePercentage: officePercentage
                },
                success: function (data) {
                    //console.log(data);
                    var window = $("#window").data("kendoWindow");
                    $('#window_wnd_title').text("");
                    window.close();
                    $("#maintenancePercentage").val('');
                    $("#officePercentage").val('');

                    readDefaultsGrid();

                    readNotDefaultsGrid();
                },

                error: function (e) {
                    console.log(e);
                    alert("There was an error setting custom values. Maintenance % and Office % are required.");
                }
            });
        }
4

2 に答える 2

1

コードをクリーンアップする必要があります。コードは同じタグを4回(!)検索しています。

$('#PayrollMarkupDefaultsGrid')。data( "kendoGrid")を4回繰り返す代わりに、変数に格納し、その変数を介してそのメソッドとメンバーを使用します。

あなたの問題に関しては、あなたがすでにそれを使おうとしているとき、あなたの剣道オブジェクトはまだ初期化されていないと思います。私はあなたのコードがここで例外を投げると信じています:

$('#PayrollMarkupDefaultsGrid').data("kendoGrid").dataSource.read();

タグが存在しないか、剣道オブジェクトとして初期化されていないか、剣道オブジェクトにパブリックdataSourceメンバーがないか、dataSourceメンバーにread()関数がないためです。これらを確認して、結果をお知らせください。

于 2013-03-27T15:00:37.327 に答える
1

これを行う必要はありません...

if ($('#frmOverride').validate().form()) {
        $.ajax({ ...

clickそして、あなたは確かにイベントハンドラーの中でこれをしたくありません。これは、jQuery Validateプラグインがすでにclickイベントをキャプチャし、有効なフォームをチェックし、をsubmitHandler介して送信することを完全に目的としたコールバック関数を提供しているためajaxです。

ドキュメントによると、

submitHandler、Callback、Default:デフォルト(ネイティブ)フォームsubmitフォームが有効な場合に

実際の送信を処理するためのコールバック。フォームを唯一の引数として取得します。デフォルトの送信を置き換えます。検証後にAjax経由でフォームを送信するのに適した場所

$(document).ready(function () {

    $("#frmOverride").validate({
        rules: {
            maintenancePercentage: {
                required: true,
                number: true
            },
            officePercentage: {
                required: true,
                number: true
            }
        },
        submitHandler: function (form) {
            // your ajax goes here
            return false; // to block page redirect since you're using ajax
        }
    });

});

シンプルなデモ:http: //jsfiddle.net/4kn3y/

于 2013-03-27T15:25:26.810 に答える