Получение родительского элемента tr из дочернего элемента в jQuery

0

У меня есть следующая структура таблицы в моем коде

<tr>
  <td>Text 1 </td>
  <td>Text 2 </td>
  <td> <span class="edit" onclick="EditAccountInfo(id1)" /> </td>
</tr>
<tr>
  <td>Text 1 </td>
  <td>Text 2 </td>
  <td> <span class="edit" onclick="EditAccountInfo(id2)" /> </td>
</tr>

При нажатии на пробел в <td>, я хочу выделить выбранную строку (<tr>). Я использую следующий код в функции javascript

function EditAccountInfo(id)
{
  $(this).closest('tr').css("background-color", "red");
}

Я не получаю никаких ошибок, а $(this).closest('tr') возвращает действительный объект, но стиль фона не применяется к <tr>.

Что я делаю не так?

  • 0
    $(this) - объект window , а не элемент, по которому щелкнули. Что такое аргумент id ?
  • 1
    изменить на EditAccountInfo(this) вместо EditAccountInfo(id1) ?
Показать ещё 3 комментария
Теги:

3 ответа

0
Лучший ответ
$('#my-table').on('click', '.edit', function () {
    $(this).closest('tr').css('backgroundColor','red');
});
1

this window потому что вы используете встроенные обработчики событий. Я бы рекомендовал более ненавязчивый подход:

<span class="edit" data-account-id="id1" />

$(document).on('click', '.edit', function() {
    var $tr = $(this).closest('tr');
    var id = $(this).data('account-id');
    //...
});
  • 0
    Вы также можете передать this в качестве аргумента в атрибуте onclick . Кроме того, если вы используете делегированный обработчик событий, не используйте .data() для получения информации о вновь добавленных элементах DOM, данных там не будет, потому что jQuery делает атрибуты data- data-* доступными только через .data() для загрузки страницы. .attr('data-account-id') используйте .attr('data-account-id') , который будет считывать атрибут в реальном времени, а не из кэша.
0

Пытаться

$(document).ready(function () {
    $('td').click(function(){
        $(this).parent().css("background","red");
    });
});
  • 0
    Вы заметите использование методов jQuery, используемых в этом вопросе? Так что можно с уверенностью сказать, что он уже использует jQuery. Хотя он используется плохо.
  • 0
    Я хотел сказать ему не использовать функцию javascript, а функцию щелчка jquery.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню