javascript - 不允许用户向 HTML 表添加重复值

标签 javascript jquery html

我需要防止用户在单击“添加行”按钮时根据表中提到的月份向 HTML 表添加重复值。我尝试使用以下方法,但在检查重复值时它总是会跳过第一行。该图显示了我在重复时遇到的错误。

enter image description here

我尝试过的方法。

<select  id="month"  class="form-control">
  <option value="Jan">Jan</option>
  <option value="Feb">Feb</option>
  <option value="March">March</option>
  <option value="April">April</option>
</select>

<input type="number" id="amt5" />

<input type="button" class="btn" value="Add Row" onclick="ftm2add5()">

<table id="table5" class="table table-dark" border="1">
    <thead>
        <tr>
            <th scope="col">Select</th>
            <th scope="col">Month</th>
            <th scope="col">T/O Value</th>
            <th scope="col" style="display:none;">TORef</th>
        </tr>
    </thead>
    <tbody>
        <tr>

        </tr>
    </tbody>
</table>


function ftm2add5() {
  var cat = $("#month").val();
  var amt = $("#amt5").val();

  var cate = $("#month option:selected").html();

  if (amt == "") {
    $("#amt5").addClass("red-border");
  } else {
    var allCells = $("#table5 tr td:nth-child(2)");
    var textMapping = {};
    allCells.each(function() {
      textMapping[$(this).text()] = true;
    });

    var count = 0;
    for (var text in textMapping) count++;

    if (count !== allCells.length) {
      alert("found duplicate values");
    } else {
      var markup =
        "<tr><td><input type='checkbox' name='record'></td><td>" +
        cate +
        "</td><td style='display:none;'>" +
        cat +
        "</td><td>" +
        amt +
        "</td></tr>";
      $("#table5 tbody").append(markup);
    }
  }
}

最佳答案

只需使用 jquery 选择器即可:

$('#table5 tr:contains("' + cat +'")').length

function ftm2add5() {
  var cat = $("#month").val();
  var amt = $("#amt5").val();
  
  var cate = $("#month option:selected").html();

  if (amt == "") {
    $("#amt5").addClass("red-border");
  } else {
    
    if ($('#table5 tr:contains("' + cat +'")').length > 0) {
      alert("found duplicate values");
    } else {
      var markup =
        "<tr><td><input type='checkbox' name='record'></td><td>" +
        cate +
        "</td><td style='display:none;'>" +
        cat +
        "</td><td>" +
        amt +
        "</td></tr>";
      $("#table5 tbody").append(markup);
    }
  }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select  id="month"  class="form-control">
  <option value="Jan">Jan</option>
  <option value="Feb">Feb</option>
  <option value="March">March</option>
  <option value="April">April</option>
</select>

<input type="number" id="amt5" />

<input type="button" class="btn" value="Add Row" onclick="ftm2add5()">

<table id="table5" class="table table-dark" border="1">
    <thead>
        <tr>
            <th scope="col">Select</th>
            <th scope="col">Month</th>
            <th scope="col">T/O Value</th>
            <th scope="col" style="display:none;">TORef</th>
        </tr>
    </thead>
    <tbody>
        <tr>

        </tr>
    </tbody>
</table>

关于javascript - 不允许用户向 HTML 表添加重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59698263/

相关文章:

javascript - 在 .onclick 函数的方法中调用选定的循环元素

javascript - Google Chrome - 如何打开默认缩放级别?

javascript - 防止在输入字段中没有文本的情况下提交

javascript - jquery 选择 this.parent 之外的新元素

javascript - JQuery 代码只适用于 firefox?

javascript - 将 <div> 固定到顶部,直到它到达容器的末尾

javascript - AngularJS Controller 的生命周期是什么?

javascript - 如何在 Jquery 中选择不在隐藏父级中的所有表单元素?

javascript - 页面加载时平滑的颜色过渡

css - 根据列数计算每个表格列的宽度