[英]Change Select list ID using Loop
I currently have a form that can add new entries on click using javascript. 我目前有一个可以在使用javascript单击时添加新条目的表单。 However, I would like to change the id of each subsequent "add-on": eg The first tbody has an id of "participant1", but the next one will have an id of "participant2", the eighth "participant8", and so forth.
但是,我想更改每个后续“附加组件”的ID:例如,第一个tbody的ID为“ participant1”,而下一个tbody的ID为“ participant2”,第八个为“ participant8”,并且等等。
Here is the excerpt from my main file: 这是我主文件的摘录:
<fieldset class="row2">
<legend>List of Participants</legend>
<p>
<input type="button" value="Add Participant" onClick="addRow('dataTable')" />
<input type="button" value="Clear Participants" onClick="deleteRow('dataTable')" />
<p>(All acions apply only to entries with check marked check boxes only.)</p>
</p>
<table id="dataTable" class="form" border="1">
<tbody>
<tr>
<p>
<td>
<input type="checkbox" required="required" name="chk[]" checked="checked" />
</td>
<td>
<div>Participant: </div>
<select name="participant1" id="participant1"> <option>Person A</option>
<option>Person B</option>
<option>Person C</option>
</select>
</td>
</p>
</tr>
</tbody>
</table>
<div class="clear"></div>
</fieldset>
And this is what I am currently attempting with my JS file: 这是我目前尝试使用的JS文件的内容:
function addRow(tableID) {
var j=1;
var table = document.getElementById(tableID);
var rowCount = table.rows.length;
if(rowCount < 50){
var row = table.insertRow(rowCount);
var colCount = table.rows[0].cells.length;
for(var i=0; i<colCount; i++) {
var newcell = row.insertCell(i);
newcell.id="participant"+ j;
newcell.innerHTML = table.rows[0].cells[i].innerHTML;
j++;
}
}else{
alert("More than 50 Participants? Are you sure?");
}
}
But this seems to only work with one entry, and not all of them. 但这似乎仅适用于一个条目,而不是所有条目。
First of all , you have a <p>
tag after a tr and that's not correct: <p>
cannot be a child of <tr>
: 首先,在tr后面有一个
<p>
标记,这是不正确的: <p>
不能是<tr>
的子代:
Here is How I'd do it: 这是我的做法:
function addNewRow(tableID) {
var j=1;
var table = document.getElementById(tableID);
var tbody = table.getElementsByTagName('tbody')[0];
var rowCount = table.rows.length;
if(rowCount < 50){
var rowId =rowCount+1;
var row = document.createElement('tr');
row.id ='row-participant'+rowId;
var td1 = document.createElement('td');
var td2 = document.createElement('td');
var input = document.createElement('input');
input.type='checkbox';
input.checked = true;
input.id='checkbox'+rowId;
input.name ='chk'+rowId+'[]';
td1.appendChild(input);
var select = document.createElement('select');
select.id='participant'+rowId;
select.options[select.options.length] = new Option('PERSON A','A');
select.options[select.options.length] = new Option('PERSON B','B');
select.options[select.options.length] = new Option('PERSON B','C');
td2.appendChild(select);
row.appendChild(td1);
row.appendChild(td2);
tbody.appendChild(row);
// var row = table.insertRow(rowCount);
}else{
alert("More than 50 Participants? Are you sure?");
}
}
function deleteRow(tableID){
var table = document.getElementById(tableID);
var rowCount = table.rows.length;
if(rowCount===1){
alert('no rows to delete ');
return false;
}
var tbody= table.getElementsByTagName('tbody')[0];
var lastOne = tbody.lastChild;
tbody.removeChild(lastOne)
}
function addRow(tableID) {
var table = document.getElementById(tableID);
var rowCount = table.rows.length;
if(rowCount < 50){
var row = table.insertRow(rowCount);
var colCount = table.rows[0].cells.length;
for(var i=0; i<colCount; i++) {
var newcell = row.insertCell(i);
//newcell.id="participant"+ rowCount;
var cellBody = table.rows[0].cells[i].innerHTML;
newcell.innerHTML = replaceAll( cellBody, 'participant1' , 'participant' + (rowCount+1) );
console.log(rowCount, newcell.innerHTML)
}
}else{
alert("More than 50 Participants? Are you sure?");
}
}
function replaceAll(str, find, replace) {
var i = str.indexOf(find);
if (i > -1){
str = str.replace(find, replace);
i = i + replace.length;
var st2 = str.substring(i);
if(st2.indexOf(find) > -1){
str = str.substring(0,i) + replaceAll(st2, find, replace);
}
}
return str;
}
This will work for you, but I will not recommend this method 这将为您工作,但我不推荐这种方法
replace all function copied from here: How to replace all occurrences of a string in JavaScript? 替换从此处复制的所有函数: 如何替换JavaScript中所有出现的字符串?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.