#javascript #html #ejs
Вопрос:
Я извлек данные из своего файла node js в свой файл ejs. Подобный этому:
<% for(var i=0; i < data.length; i ) { %>
<tr>
<td id="value"><%= i 1 %></td>
<td ><%= data[i] %></td>
<td><button onclick="myFunction()" id="btn-download" class="btn btn-light"><i class="fas fa-file-download"></i>indir</button></td>
</tr>
<% } %>
Он правильно отображает данные. Но когда я хотел использовать индексы данных в myFunction(),он показывает мне первый индекс. Это моя функция():
<script>
function myFunction() {
var text=document.getElementById("value").innerHTML;
/*var filename="data.txt";
download(filename,text);*/
console.log(text)
}
</script>
Я хочу, чтобы у меня
1
2
3
Но у меня есть только
1
1
1
Как можно получить результат, который я хочу?
Комментарии:
1. Привет, один из способов-передать
i 1
его непосредственно в функцию,onclick="myFunction(i 1)"
а затем получить к нему прямой доступ в функции.2. Вы используете
id
селектор, вот почему он будет отображаться1
только3. Сгенерированный вами HTML-код недействителен. Не допускается наличие нескольких элементов с одним и тем же идентификатором. Идентификатор должен быть уникальным.
Ответ №1:
Проблема в том, что вы используете несколько элементов с одинаковым идентификатором:
//Step 1. Give unique ids
<td id="value<%= i 1 %>"><%= i 1 %></td>
//Step 2. Pass param to function and use data-id to pass 'ID' of <td>
<td><button onclick="myFunction()" id="btn-download" class="btn btn-light" data-id="value<%= i 1 %>"><i class="fas fa-file-download"></i>indir</button></td>
//Step 3. Use data-id in the javascript function to refer to the <td>
function myFunction() {
var buttonId=event.target.getAttribute("data-id");;
var text= document.getElementByID(buttonId).innerHTML;
/*var filename="data.txt";
download(filename,text);*/
console.log(text)
}