2

我有一些像这样的html元素:

 <table id="myTable"></table>

    <select name="mySelect">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    </select>

    <a href="javascript:void(0)" onclick="addToTable()">Add new</a>

    <script>
    addToTable = function() {
      var selected = $("select[name*='mySelect'] option:selected").val();
      $('#myTable').find('tr').each(function() {
        if ($(this).attr('id')==selected) { 
          alert('Record has already existed!'); return false;
        }
        else $('#myTable').append('<tr id="'+selected+'"><td>'+selected+'</td></tr>');
      });
    }
    </script>

问题是:当我添加两个具有相同 id 的记录(行)时,它会提醒消息,但会继续追加新行而不是中断循环。我在这里做错了什么?

提前致谢。

4

3 回答 3

2

你在做什么:

for every existing row R
  if R.id == newRow.id
    alert
    break
  else
    add newRow

这将为具有该 ID 的现有行之前的每一行添加 newRow。使用行 [1,2,3,4,5,6,7,8,9] 并添加第 9 行将在警报“已经存在”之前添加该行 8 次。

你的意思是:

exists = false
for every existing row R
  if R.id == newRow.id
    existing = true
    alert
    break

if !exists
  add newRow

等效于 JS:

addToTable = function() {
  var selected = $("select[name*='mySelect'] option:selected").val();
  var exists = false;
  $('#myTable').find('tr').each(function() {
    if ($(this).attr('id')==selected) { 
      alert('Record has already existed!');
      exists = true;
      return false;
    }
  });
  if(!exists) {
    $('#favourite_hotels_table').append('<tr id="'+selected+'"><td>'+selected+'</td></tr>');
  }
}
于 2011-08-26T08:19:43.357 回答
1

我不确定,但也许其他方面有问题,如果你这样尝试?

addToTable = function() {
    var selected = $("select[name*='mySelect'] option:selected").val();
    $('#myTable').find('tr').each(function() {
        if ($(this).attr('id') == selected) {
            alert('Record has already existed!');
            return false;
        } else {
          $('#favourite_hotels_table').append('<tr id="' + selected + '"><td>' + selected + '</td></tr>');
        }
    });
}
于 2011-08-26T08:13:54.590 回答
0

我为此http://jsfiddle.net/gj9eN/1/创建了一个小提琴,但您的代码似乎不正确。

当表中没有行开始时, tr 上的 .each() 将永远不会执行。请提供更多代码来验证这一点?

这不是更好(更短)吗:

addToTable = function() {
    var selected = $("select[name*='mySelect'] option:selected").val();

    if ($("#" + selected) == undefined) {
        $('#myTable').append('<tr id="'+selected+'"><td>'+selected+'</td></tr>');
    } else {
        alert('Record already exists!');
    }
}
于 2011-08-26T08:18:04.427 回答