#jquery #css
#jquery #css
Вопрос:
Я пытаюсь добавить класс css к моей кнопке после некоторого ajax:
$('a.vote-up-0').click(function() {
var id = $(this).siblings('.reply-id').val();
var ajax_auth_token = $('#auth_token').val();
$.post('user/?action=ajax', {
vote_type: 'up',
reply_id: id,
auth_token: ajax_auth_token
}, function(data, return_status) {
var json_data = jQuery.parseJSON(data);
switch(json_data.r_message)
{
case "success":
output = "Yay it works!"; // change
alert(output);
$(this).addClass('vote-up-1'); // ** the culprit **
break;
Оповещение работает, однако оно не добавляет к нему класс, проголосовавший за 1. На странице есть несколько экземпляров одного и того же класса (т. Е. проголосовавших за 0), поэтому, если я изменю (это) на ‘проголосовавших за 0’, это изменит их все. У кого-нибудь есть идеи?
Комментарии:
1. поместите предупреждение после строки-виновника и проверьте
Ответ №1:
В верхней части вашего обработчика «click» сохраните this
значение:
var theButton = this;
Затем в вашем обработчике «.post()»:
$(theButton).addClass('vote-up-1');
Проблема в том, что this
не будет ссылаться на кнопку, когда jQuery вызывает ваш обработчик «.post()». Таким образом, вы сохраняете копию в локальную переменную, и она будет там ждать обработчика, когда придет время.
Ответ №2:
Брат: $(this).addClass('vote-up-1'); // ** the culprit **
действительно виноват. $(this)
недоступен в этой области, поэтому лучше, чтобы вы получили дескриптор кнопки перед выполнением любого ajax. например:
var btnHnd = $(this);
Теперь вы можете создавать материал для публикации: $.post('user/?action=ajax', { ...
Ответ №3:
измените это
$(putyourbuttonidhere).addClass('vote-up-1');