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