У меня есть следующая структура таблицы в моем коде
<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>
.
Что я делаю не так?
$('#my-table').on('click', '.edit', function () {
$(this).closest('tr').css('backgroundColor','red');
});
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');
//...
});
this
в качестве аргумента в атрибуте onclick
. Кроме того, если вы используете делегированный обработчик событий, не используйте .data()
для получения информации о вновь добавленных элементах DOM, данных там не будет, потому что jQuery делает атрибуты data- data-*
доступными только через .data()
для загрузки страницы. .attr('data-account-id')
используйте .attr('data-account-id')
, который будет считывать атрибут в реальном времени, а не из кэша.
Пытаться
$(document).ready(function () {
$('td').click(function(){
$(this).parent().css("background","red");
});
});
$(this)
- объектwindow
, а не элемент, по которому щелкнули. Что такое аргументid
?EditAccountInfo(this)
вместоEditAccountInfo(id1)
?