我如何知道是否有任何行选择在我的数据表

How do I know if there are any rows selected in my datatable?

本文关键字:选择 我的 数据表 任何行 何知道 是否      更新时间:2023-09-26

我正在使用数据表和validationEngine插件。

我的问题是,我只能知道在分页的特定页面上选择了哪些行。因此,如果我在分页的第二页上选择了行,而在第一页上没有选择行,它将显示一个错误'Please select a row'。

我读过关于它的帖子,但不是针对我的代码,所以这就是我问这个问题的原因。

所以除了我的验证代码,我应该添加以下代码,

$("#mSelector").on("click", "button[name='next'],button[name='finish']",               
function() {
var $stepSelector = $(".WizardStep:visible"); // get current step               
 var anyError = false;                      
 $stepSelector .find("input,textarea,select").each(function () {
 if (!$(this).validationEngine('validate')) {// validate every input element inside this step
           anyError = true;
    }
 });
 if (anyError)
  return false; // exit if any error found

});

});

$(function () {
        var singleSelect =  $('.single-select').DataTable({
            'lengthMenu': ['300']
        });
        // Single row select
        $('.single-select tbody').on('click', 'tr', function () {
            if ($(this).hasClass('selected')) {
                $(this).removeClass('selected');
                $('#hId').val('');
            } else {
                singleSelect.$('tr.selected').removeClass('selected');
                $(this).addClass('selected');
                $('#Id').val($(this).attr('id'));
            }
        });
        var cId = $('#hdId').val();
        if (cId > 0) {
            $("#grid1.single-select")
                .find("[id='" + currentId + "']")
                .addClass('selected');
        }
        //selection
        var mGrid = $("#mSelector").DataTable({
            'lengthMenu': ['300']
        });
        $('#mSelector tbody').on('click', 'tr', function () {
            if ($(this).hasClass('selected')) {
                $(this).removeClass('selected');
                $('#mId').val('');
            } else {
                mGrid.$('tr.selected').removeClass('selected');
                $(this).addClass('selected');
                $('#mId').val($(this).attr('id'));
            } 
        });

$("button[name='next'],button[name='finish']").click(function() {
  var $step = $(".Step:visible"); // get current step
  var ifError = false;
  $step.find("input,textarea,select").each(function() {
    if (!$(this).validationEngine('validate')) { // validate 
      ifError = false;
    }
  });
  if (ifError)
    return false; // exit if there is an error
});

DataTables从DOM中删除不可见的行,因为各种原因,所以当你附加一个事件处理程序时,它只适用于当前可见的元素。

<

解决方案/strong>

您需要通过在on()调用中提供选择器作为第二个参数来使用事件委托。

替换此代码:

$("button[name='next'],button[name='finish']").click(function() {
   // ... skipped ...
});

$("#mSelector").on("click", "button[name='next'],button[name='finish']", function() {
   // ... skipped ...
});

其中mSelector为表ID。

来自jQuery on()方法文档:

委托事件的优点是它们可以处理来自以后添加到文档中的后代元素。

请参阅jQuery on()方法文档中的"直接和委托事件"和jQuery DataTables -为什么点击事件处理程序不工作获取更多信息