У меня такой HTML-код:
<table id="laboral">
<tr>
<td><input type="text" name="start"/></td>
<td><input type="text" name="end"/></td>
<td><textarea name="desc"></textarea></td>
<td><button type="button" onclick="saveValues(this);createRow('laboral')"> + </button></td>
</tr>
</table>
Я хочу сохранить значения в трех ячейках (2 входа и 1 текстовая область).
Кнопка создает еще одну строку, аналогичную первой, с теми же входами и именами. Проблема в том, что я не знаю, как получить доступ к этой строке, то есть к строке, которой принадлежит кнопка.
Я пробовал с this.parentNode.parentNode, но не работал.
Попробуй это
<table id="laboral">
<tr>
<td><input type="text" name="start"/></td>
<td><input type="text" name="end"/></td>
<td><textarea name="desc"></textarea></td>
<td><button type="button" onclick="saveValues(this)"> + </button></td>
</tr>
</table>
var inputVals = [];
function saveValues(elm) {
// button td tr tbody table
var table = elm.parentNode.parentNode.parentNode.parentNode;
// iterating through the first row cells
for (var i = 0; i<table.rows[0].cells.length-1; i++) {
// the current cell
var cell = table.rows[0].cells[i];
// pushing the input elm value into the array
inputVals.push(cell.childNodes[0].value);
// retrieving the pushed value
alert(inputVals[i]);
}
}
Вы можете изменить код.
Вы передаете ссылку на кнопку в saveValues
, поэтому в saveValues
первый аргумент будет ссылаться на кнопку. Позвольте называть этот аргумент btn.
btn.parentNode
будет td
содержащим кнопку, а 'btn.parentNode.parentNode
будет tr
содержащий это td
. Так:
function saveValues(btn) {
var tr = btn.parentNode.parentNode;
// Work with 'childNodes' and the 'childNodes' of those children to get the values
}
this
вcreateRow
. Тогда это должно быть[[yourParameterName]].parentNode.parentNode
вместоthis.parentNode.parentNode
. Или измените вызовcreateRow.call(this, "laboral")
чтобы вы могли использоватьthis.parentNode.parentNode