Как указать индексный номер в свойстве onClick кнопки строки при добавлении новой строки?
Нет.Вместо этого используйте тот факт, что текстовые поля и кнопка находятся в одной строке.Я, вероятно, вообще не использовал бы onclick
на кнопке;вместо этого я бы обработал один щелчок на table
и обработал бы нажатие кнопки там (это называется делегированием события).Примерно так:
var table = document.getElementById("theTableID");
table.onclick = function(event) {
var elm, row, boxes, index, box;
// Handle IE difference
event = event || window.event;
// Get the element that was actually clicked (again handling
// IE difference)
elm = event.target || event.srcElement;
// Is it my button?
if (elm.name === "clear") {
// Yes, find the row
while (elm && elm !== table) {
if (elm.tagName.toUpperCase() === "TR") {
// Found it
row = elm;
break;
}
elm = elm.parentNode;
}
if (row) {
// Get all input boxes anywhere in the row
boxes = row.getElementsByTagName("input");
for (index = 0; index < boxes.length; ++index) {
box = boxes[index];
if (box.name === "whatever") {
box.value = "";
}
}
}
}
};
... но если вы хотите продолжать использовать атрибут onclick
на кнопке, вы можете взять середину этого:
Кнопка:
<input type="button" onclick="clearBoxes(this);" ...>
Функция:
function clearBoxes(elm) {
var row, boxes, index, box;
// Find the row
while (elm) {
if (elm.tagName.toUpperCase() === "TR") {
// Found it
row = elm;
break;
}
elm = elm.parentNode;
}
if (row) {
// Get all input boxes anywhere in the row
boxes = row.getElementsByTagName("input");
for (index = 0; index < boxes.length; ++index) {
box = boxes[index];
if (box.name === "whatever") {
box.value = "";
}
}
}
}
Ссылки:
- DOM2 Core спецификация - хорошо поддерживается всеми основными браузерами
- DOM2 HTML спецификация - связи между DOM и HTML
- DOM3 Core спецификация - некоторые обновления, не все поддерживаются всеми основными браузерами
- HTML5 спецификация - которая теперь содержит привязки DOM / HTML, например, для
HTMLInputElement
, так что вы знаете о свойствах value
и name
.
Не по теме : Как вы можете видеть, мне пришлось обойти некоторые различия в браузере и сделать несколько простых полезных вещей (например, найти ближайший родительский элементэлемент) явно в этом коде.Если вы используете приличную библиотеку JavaScript, такую как jQuery , Прототип , YUI , Closure или любой из нескольких других , они сделают это за вас, что позволит вам сконцентрироваться на вашей реальной проблеме.
Чтобы дать вам идею, вот тот первый пример (обработка клика через делегирование события), написанный с помощью jQuery:
$("#theTableID").delegate("input:button[name='clear']", "click", function() {
$(this).closest("tr").find("input:text[name='whatever']").val("");
});
Да, действительно.И другие библиотеки также упростят задачу.