0

该插件似乎工作正常。如果我将两个字段留空,我会收到通知,它们是必需的并且它们必须是有效数字。

我遇到的问题是,如果我用正确的数据填写两个文本字段并点击我的添加按钮,我会在下面的代码中遇到错误。数据仍会发送到我的控制器并执行我的添加,但警报正在从我的错误部分触发。

    $(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") 四次将其存储在一个变量中,并通过该变量使用其方法和成员。

至于你的问题,我相信你的剑道对象在你已经尝试使用它时还没有初始化。我相信您的代码会在这里引发异常:

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

因为标签不存在或未初始化为 kendo 对象或 kendo 对象没有公共 dataSource 成员或 dataSource 成员没有 read() 函数。请检查这些并让我知道您的结果。

于 2013-03-27T15:00:37.327 回答
1

没有必要这样做...

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

而且您当然不想在click事件处理程序中执行任何此类操作。这是因为 jQuery Validate 插件已经在捕获click事件,检查有效的表单,并提供一个submitHandler回调函数,该函数完全用于通过ajax.

根据文档

submitHandler,回调,默认:默认(本机)表单提交回调,用于在表单有效时

处理实际提交。获取表单作为唯一参数。替换默认提交。验证后通过 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 回答