【问题标题】:loop through html table and check if a checkbox is checked or not循环遍历 html 表并检查是否选中了复选框
【发布时间】:2016-02-16 00:38:43
【问题描述】:

我在这里要做的是验证 HTML 表格。在继续之前,我需要至少选中一个复选框。它正在做它需要做的事情,除非我没有选中一个复选框。

它通过 HTML 表上的数据计数循环警报“未找到”。我怎样才能让它变得更好?我需要在表格内循环以在选中复选框的情况下获取同一行的数据。

JS

$('#dataTable').find('tr').each(function () {
    var row = $(this);
    if (row.find('input[type="checkbox"]').is(':checked') ) {
        alert "found"
        //im getting data here.
        });
    }else{
        alert "NOthing found"
    };
});

【问题讨论】:

    标签: javascript jquery html checkbox


    【解决方案1】:

    无需遍历任何内容。只需使用您的选择器在 dataTable 中查找选中的复选框。如果存在,则满足您的“真实”条件。

    if ($('#dataTable input[type="checkbox"]:checked').size()) {
        // Proceed
    }
    

    现在,如果您想对“已检查”行中的数据执行某些操作,可以执行以下操作:

    var checkedItems = $('#dataTable input[type="checkbox"]:checked').each(function() {
        // Do something with the row
        console.log($(this).parent('tr').find('.data-selector').val());
    });
    if (!checkedItems.size()) {
        // Nothing was checked
    }
    

    【讨论】:

    • 这永远是真的
    • $(...) 返回一个永远不会评估为假的对象。您必须检查 .length 属性
    • 这很难回答这个问题,因为他清楚地表明他需要遍历可接受的 tr 来做某事,而不仅仅是检查是否检查了某事。不过,这段代码还不错~
    • @Steven Moseley '我需要在表格内循环以在选中复选框的情况下获取同一行的数据。'如上所述。也很清楚
    • @Steven Moseley 是的,就是这样。删除了我的反对票和赞成票~
    【解决方案2】:

    这样,您将为每个检查的行执行代码,如果没有检查任何行,您将执行您认为合适的操作,而不会浪费太多资源

      var is_table_empty = true;
     jQuery('#dataTable').find('input[type="checkbox"]:checked').each(function(){
        var row = jQuery(this).closest("tr");
        //do what needs to be done to an active row
        is_table_empty= false;
      });
      if(is_table_empty)
      {
         //do what you need to do if nothing is clicked
      }
    

    【讨论】:

      【解决方案3】:

      尝试与您的代码相同。

      var checkFound = false;
      
      $('#dataTable').find('tr').each(function() {
        var row = ;
        if (!checkFound && $(this).find('input[type="checkbox"]').is(':checked')) {
          checkFound = true;
          return false;
        }
      });
      
      if (checkFound)
        alert('checked Found');
      else
        alert('nothig checked');
      

      【讨论】:

      • 如果成本。选择器成本。不过,就正确答案而言,这是一个
      【解决方案4】:

      与其在整个循环中发出警报,不如使用一个标志并在发现某些东西时更新它。基于标志,(最后 - 在循环之后)只显示状态!。 希望以下修改对您有所帮助:

      var found = false;
      $('#dataTable').find('tr').each(function () {   
      var row = $(this);
      if (row.find('input[type="checkbox"]').is(':checked') ) {
          found=true;
          //alert ("found"); 
          // Do your job here
          }
      else{
           //alert "NOthing found"
           //found=false;
          };
      });
      if (!found){
          alert("Nothing Found");
      }
      else{
           alert("Found");// Or you can omit the else part
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-03-02
        • 2011-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-12
        相关资源
        最近更新 更多