每个循环都打破Jquery的问题?

时间:2011-08-26 08:08:17

标签: jquery loops break out each

我有一些像这样的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的记录(行)时,它会提醒消息,但不会附加新行而不是中断循环。我错在哪里了?

提前致谢。

3 个答案:

答案 0 :(得分: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>');
  }
}

答案 1 :(得分: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>');
        }
    });
}

答案 2 :(得分: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!');
    }
}