2015-12-01 4 views
0

Я Td в HTML таблицу, как это:, как передать этот элемент с помощью JQuery

я должен добавить или удалить класс highlight OnClick каждого тд и на основе возвращаемых данных с сервера:

$("body").on("click","table#idnum tbody tr td",function(event){ 
var tdid = this.id; 
var url = '...server url ..........'; 
var data = {tdid:tdid}; 
$.ajax({ 
     url, 
     data: data, 
     type:"POST", 
     dataType: "json", 
     success: function(data){ 
     if(data.returnval==0){ 
      this.removeClass('highlight'); 
     }else{ 
      this.addClass('highlight'); 
     } 
    } 
}); 

Вышеупомянутый код был протестирован и нашел, что он может изменить значение поля интереса mysql на основе значения get из страницы (tdid), но не может добавить/удалить класс td на основе данных обратного обратного вызова (returnval 0 или 1). Я думаю, что селектор, используемый для выделения td, не соответствует указанному выше коду.

Примечание: Я не могу использовать какой-либо класс для td, чтобы добавить или удалить класс, выбрав этот класс.

ответ

2

Вы должны попробовать,

// this will not work in success callback  
if(data.returnval==0){ 
    $('#'+tdid).removeClass('highlight');//use td id 
}else{ 
    $('#'+tdid).addClass('highlight'); 
} 
+0

Поскольку 'td' явно содержит id, поэтому лучше всего выбрать этот' td' с этим id для removeClass, это проще и проще, чем использование контекста. Итак, по моему мнению, это приемлемый ответ среди всех, хотя оба предложения хороши. Итак, я проголосовал за другого. –

2

Есть две проблемы.

Во-первых, когда вызывается функция AJAX success, this - это не то же самое, что и в исходной функции обработчика события. Вы можете использовать опцию context: для $.ajax, чтобы передать его на:

context: this, 

Во-вторых, this является DOM элемент, а не объект JQuery, так что вам нужно использовать $(this) использовать методы JQuery на нем.

+0

Лучший ответ среди этих ответов – Satpal