Проверка Javascript для флажков в JQuery DataTable

0

У меня есть таблица, которая привязана к JQuery datatable.

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

Ниже приведен код javascript для привязки таблицы /grid-

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\"" : "") + "/>";
                     }
                     },
                     ]
    });        
}

Прежде чем сохранять данные сетки/таблицы, я хочу проверить, что флажок " View или Modify отмечен. Мне нужно написать функцию проверки javascript.

Это то, что у меня есть tried-

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.
}

То, что я пытался сделать, это если Modify и View не отмечены, а затем верните false. Когда я проверил с $(gridProfiles.fnGetData()).each(function() вместо $(grid1).find("tbody tr").each(function(), все было нормально, но строки сетки добавляются динамически, последние добавленные строки не будут отображаться при использовании $(gridProfiles.fnGetData()).each(function(). Любое решение?

  • 0
    По крайней мере, просмотр или изменение флажка каждой строки, я полагаю.
Теги:
validation

4 ответа

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; 
}
1

Ваша функция, на мой взгляд, почти хорошая. Вы сделали одну ошибку в каждой функции, я бы исправил эту функцию:

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

Главное изменение заключается в том, чтобы перемещать возвратную ложную инструкцию из каждого цикла. В вашей версии этот цикл всегда имел бы только одну итерацию. В моей версии он будет итерации, пока не будет найден установленный флажок. Если флажок не установлен, установите флажок false. У меня нет компилятора в моей голове, так жаль ошибок.

  • 0
    Я получаю Microsoft JScript runtime error: Object doesn't support property or method 'is' в IE
  • 0
    замените это на $ (это)
Показать ещё 4 комментария
1

вы должны добавить временную переменную var, такую как 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;
}
  • 0
    Вы можете уточнить немного больше?
  • 0
    Я на этом, но я полагаю, что вы проверяете более одного варианта
Показать ещё 2 комментария
0

Измените class name на enabledbool из флажка

function Validate() {
    var flag=0;
    $(grid1.fnGetData()).each(function () {
        if ($(this).find('.enabledbool').is(':checked')) {
            flag++;
        }
    });
    return flag ? true : false;// return here
}
  • 0
    Сетка / таблица привязывается динамически. Там может быть несколько строк. Ваш код работает нормально для одной строки. Но когда есть строка с проверенными значениями и другая строка с непроверенными значениями, ваш код завершается ошибкой.
  • 0
    у тебя есть решение?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню