У меня есть таблица, отображающая синтаксис Razor
Вот код
@foreach (var item in Model)
{
<tr>
<td class="point">
@(rowNo += 1)
</td>
<td class="title">
@Html.DisplayFor(modelItem => item.Date_of_Birthday)
</td>
<td id="name" class="title">
@Html.DisplayFor(modelItem => item.Name)
</td>
<td class="title"></td>
<td class="title"></td>
<td class="title"></td>
<td style="text-align: end;">
<img id="delete_pt" src="~/images/icons8-Delete-50.png"/>
<img src="~/images/doc-50.png"/>
</td>
</tr>
}
Я пытаюсь получить
<td id="name" class="title">
@Html.DisplayFor(modelItem => item.Name)
</td>
Via JS
Вот код
<script>
$(document).on('click', '#delete_pt', function () {
var title = $(this).find('#name').html();
console.log(title);
});
Но когда я нажимаю, я не получаю значение, он пуст. Где моя ошибка?
Ваш элемент с id="delete_pt"
является <img>
и не содержит дочерних элементов. Вам нужно найти родительский элемент <tr>
а затем найти элемент <td id="name">
.
$(document).on('click', '#delete_pt', function () {
var title = $(this).closest('tr').find('#name').html();
console.log(title);
});
Тем не менее, вы создаете повторяющиеся атрибуты id
которые являются недопустимыми html. Вам нужно заменить атрибуты id
именами классов, например
<td class="name title">
@Html.DisplayFor(modelItem => item.Name)
</td>
....
<img class="delete_pt" src="~/images/icons8-Delete-50.png" />
а затем использовать
$(document).on('click', '.delete_pt', function () {
var title = $(this).closest('tr').find('.name').html();
console.log(title);
});
Вы можете просто передать item.name как значение js
<img id="delete_pt" src="~/images/icons8-Delete-50.png" onclick="deletePT(@item.Name)"/>
и добавьте функцию для yout JS: (удалите событие onclick)
function deletePT(itemname){
console.log(itemname);
}
Ваш код генерирует значение ID более чем одному элементу в HTML - это плохо. но это не проблема проблемы
я считаю, вам нужно изменить его на
@Html.DisplayFor(item=> item.Date_of_Birthday)
.text()