Почему может не срабатывать JQuery

132
11 ноября 2019, 22:10

почему не срабатывает у меня Jquery? Вот есть функция

$('.btn_act_offer').click(function() {
    var $id = $(this).data('offer-id');
    var $url = $(this).data('url');
    //var $class = $(this).hasClass('activate_offer');
    if ($(this).hasClass('activate_offer')){
        var action = 'activate';
    }else{
        var action = 'deactivate';
    }

    $.ajax({
        method: 'POST',
        url: $url,
        data: { offer_id: $id, action: action},
        headers: {'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')},
        dataType: 'json',
        success: function(data) {
            if (data.success) {
               if($(this).hasClass('activate_offer')){
                   swal("Success!", data.payload, "success");
                   $(this).removeClass('activate_offer')
                       .removeClass('btn-success')
                       .addClass('btn-danger')
                       .addClass('deactivate_offer')
                       .text('Деактивировать');
                   console.log('if');
                } else {
                   swal("Success!", data.payload, "success");
                   $(this).removeClass('deactivate_offer')
                       .removeClass('btn-danger')
                       .addClass('btn-success')
                       .addClass('activate_offer')
                       .text('Активировать');
                   console.log('else');
                }
            } else {
                // for debugging
                alert(data);
            }
        },
        error: function(xhr, textStatus, thrownError) {
            alert('Произошла ошибка! Обновите страницу!');
            //alert(xhr.status);
            //alert(thrownError);
        }
    })
});

После ajax запроса не удаляются классы и не добавляются, хотя console.log() срабатывает. Если ввожу в панели вебмастера в браузере то все работает отлично. Направте что не так, а кстати вот HTML этой кнопки:

<button data-offer-id="3" data-url="http://ka.local/admin/change-status-offer" class="btn btn-success activate_offer btn_act_offer">Активировать</button>
Answer 1

Потому что this в обработчике success не то, что Вы думаете.

if($(this).hasClass('activate_offer')){

Вот так будет работать:

success: (function(data) {
  ...
}).bind(this),
READ ALSO
Проверка свойства объекта

Проверка свойства объекта

Как сделать так, чтобы при нажатии отмены в prompt цикл прекращался?

152
sequelize без ассоциации

sequelize без ассоциации

Подскажите пожалуйста

142