0

我有一个与 JQuery 数据表绑定的表。

<table id="grid1">
 <thead>
   <tr>
     <th>Name</th>
     <th>View</th>
     <th>Modify</th>
   </tr>
  </thead>
</table>

下面是绑定表格/网格的javascript代码-

function grid1_LoadData() {        
    grid1.fnDestroy();
    grid1.dataTable({
        "sScrollY": "200px",
        "bStateSave": true,
        'bDeferRender': true,
        'sAjaxSource': '/controller/GetData,
        'aoColumns': [
                     { 'mDataProp': 'Name' },
                     { 'mDataProp': 'View', "sWidth": "55%", sType: 'bool', bSearchable: false, bSortable: false, mData: 'View',
                         "mRender": function (data, type, full) {
                             return "<input class=\"enabledbool\" name=\"CanView" + full.ID + "\"  type=\"checkbox\" " + (data ? " checked=\"true\"" : "") + "/>";
                         }
                     },
                     { 'mDataProp': 'Modify', "sWidth": "65%", sType: 'bool', bSearchable: false, bSortable: false, mData: 'Modify', "mRender": function (data, type, full) {
                         //  console.log(data);
                         return "<input class=\"enabledbool\" name=\"CanModify" + full.ID + "\"  type=\"checkbox\" " + (data ? " checked=\"true\"" : "") + "/>";
                     }
                     },
                     ]
    });        
}

在保存网格/表格数据之前,我至少要检查ViewModify选中复选框。我需要编写一个 javascript 验证函数。

这是我尝试过的-

function Validate() {
    $(grid1.fnGetData()).each(function () {
        if ($(.checkbox).is(':checked')) {
            return true;
        }
        else {
            return false;
        }
    });
}

等待宝贵的建议。

更新 我最终使用下面的 javascript 函数来检查验证 -

function Validate() {
    var allOk = true;
    $(grid1).find("tbody tr").each(function (){
        var row = $(this);
        if (!row.Modify && !row.View) {
            allOk = false;
        }
    });
    return allOk; // Make `Validate` return true only if all rows validate.
}

我试图做的是 if Modifyand Vieware not checks then return false。当我用$(gridProfiles.fnGetData()).each(function ()而不是检查时$(grid1).find("tbody tr").each(function (),它很好。但是网格行是动态添加的,使用时不会列出最后添加的行$(gridProfiles.fnGetData()).each(function ()。有什么解决办法吗?

4

4 回答 4

1

您应该添加一个临时变量,例如 oneIsSet = false 并在选中任何一个时更改该值。

function Validate() {
    var allValid = true;
    $(grid1).find("tbody tr").each(function () {
        var row = $(this);
        var thisOneValid = false;
        if (row.find('input[type="checkbox"]:checked').size() > 0)
            thisOneValid = true;
        if (! thisOneValid)
            allValid = false;
    });
    return allValid;
}
于 2013-10-03T10:10:24.680 回答
1

在我看来,你的功能几乎是好的。您在每个函数中都犯了一个错误,我会将此函数更正为:

function Validate() {
    $(grid1.fnGetData()).each(function () {
        if (this.is(':checkbox :checked')) {
            return true;
        }
    });
    return false;
}

主要变化是从每个循环中移动 return false 语句。在您的版本中,此循环将始终只有一次迭代。在我的版本中,它将迭代直到找到选中的复选框。如果没有选中的复选框,则返回 false。我脑子里没有编译器,很抱歉出现错误。

于 2013-10-03T10:19:10.300 回答
0

将您从复选框更改class nameenabledbool

function Validate() {
    var flag=0;
    $(grid1.fnGetData()).each(function () {
        if ($(this).find('.enabledbool').is(':checked')) {
            flag++;
        }
    });
    return flag ? true : false;// return here
}
于 2013-10-03T10:13:57.100 回答
0

这对我来说很好用-

function Validate() {
    var allOk = true;
    $(grid1).find("tbody tr").each(function () {
        var row = $(this);
        if (row.find($(':checkbox:not(:checked)')).length == 2) {
            allOk = false;
            return allOk;
        }
    });
    return allOk; 
}
于 2013-10-07T15:35:42.577 回答