У меня есть таблица в моем HTML под названием id = 'myTable'. Я затем заполнение строк на лету в JavaScript (потому что он будет постоянно меняться в течение использования программы.)Таблица Javascript - установка onclick на лету
В другом месте в коде есть функция:
function OnClickRowMyTable(row){
alert("You clicked row " + row.toString());
}
Тогда Я строю таблицу:
table = document.getElementById("myTable");
for (i = 0; i < 10; i++) {
newRow = document.createElement('tr');
newRow.setAttribute('style', "background-color: #FFFFBB");
newRow.title = "";
newRow.onclick = (function() { var iUse = i; return OnClickRowMyTable(iUse); })();
table.appendChild(newRow);
for (j = 0; j < 5; j++) {
newCol = document.createElement('td');
newCol.innerHTML = "-";
newRow.appendChild(newCol);
}
}
Если я оставлю(); в конце строки onclick он фактически вызывает функцию OnClickRowMyTable несколько раз по мере построения таблицы.
Если я заканчиваю эту строку без функции(), то функция не вызывается во время построения, но когда я нажимаю на строку, она всегда говорит, что я нажал строку 10, независимо от строки, которую я нажал.
Как остановить функцию, вызываемую во время построения, а затем сказать, что я нажал правильную строку, когда я нажму на нее, вместо того, чтобы сказать, что я все время нажал строку 10?
Я не вижу тег JQuery на этот вопрос – j08691
Дно вещь выглядит хорошо, но я не хочу, чтобы связать идентификаторы со строками таблицы. Я хочу что-то сделать с «i» в цикле в моем коде. – Rewind
Возможно, вы столкнетесь с множеством конфликтов, пытаясь использовать вашу функцию внутри вашего цикла. Кроме того, лучше всего использовать функции действия в функциях делегирования, чтобы вы могли добавлять новые строки в таблицу, не беспокоясь о добавлении функции onclick во время создания. Это также не заставит вас отслеживать ваш индекс (или «i»), пока вы вставляете новые строки. Вместо этого вы можете получить строку внутри делегированной функции обратного вызова и использовать любые свойства из этой строки в функции обратного вызова. – StephenKelzer