За последние 24 часа нас посетили 56834 программиста и 1685 роботов. Сейчас ищут 1202 программиста ...

Jquery не воспринимает изменения класса

Тема в разделе "JavaScript и AJAX", создана пользователем Alesto, 30 май 2017.

  1. Alesto

    Alesto Новичок

    С нами с:
    15 янв 2017
    Сообщения:
    72
    Симпатии:
    8
    Всем привет. Есть код
    Код (Javascript):
    1. $('.users_sub').click(function(e) {
    2.       e.preventDefault;
    3.       var id = $(this).attr('id');
    4.       var element = $(this);
    5.       console.log('sub');
    6.       $.ajax({
    7.         url: 'index.php?route=profile/subscribe',
    8.         type: 'post',
    9.         data: "data=" + id,
    10.         success: function(response) {
    11.           console.log(response);
    12.           if (response === '1') {
    13.             element.removeClass('users_sub');
    14.             element.addClass('users_unsub');
    15.             element.text('Unsubscribe');
    16.           }
    17.         }
    18.       })
    19.     });
    20.  
    21.     $('.users_sub').on('click', function(e) {
    22.       e.preventDefault;
    23.       var id = $(this).attr('id');
    24.       var element = $(this);
    25.       console.log('unsub');
    26.       $.ajax({
    27.         url: 'index.php?route=profile/subscribe',
    28.         type: 'post',
    29.         data: "data=" + id,
    30.         success: function(response) {
    31.           console.log(response);
    32.           if (response === '1') {
    33.             element.removeClass('users_sub');
    34.             element.addClass('users_unsub');
    35.             element.text('Unsubscribe');
    36.           }
    37.         }
    38.       });
    39.     });
    Проблема в том, что после изменение класса элемента он не воспринимается jquery. Т.е. после нажатия на элемент с классом users_sub с последующим удаление и добавлением класса users_unsub клик на этот элемент идет так как на элемент с классом users_sub. В инспекторе смотрел классы изменяются.
     
  2. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    @Alesto, во-впервых, не понятно зачем у вас два абсолютно одинаковых обработчика, но спишем это на случайность копипаста. Во-вторых. обработчик события устанавливается на элемент, а не на его класс. Для динамически добавленных или измененных элементов, необходимо устанавливать делегированную обработку событий.
    Код (Javascript):
    1. $(document).on('event_type', 'element_selector', handler);
     
    denis01 и Alesto нравится это.
  3. grach28rus

    grach28rus Новичок

    С нами с:
    1 ноя 2016
    Сообщения:
    6
    Симпатии:
    1
    Привет. Никак не могу понять.... Ну как тут создать сообщение? Ткни плиз.
     
  4. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Смотрим в песочнице
    Код (Javascript):
    1. $(document).on('click', '.users_sub', function(e) {
    2.     $(this)
    3.     .text('Unsubscribe')
    4.     .toggleClass('users_sub users_unsub');
    5.    
    6. });
    7. $(document).on('click', '.users_unsub', function(e) {
    8.     $(this)
    9.     .text('Subscribe')
    10.     .toggleClass('users_sub users_unsub');
    11. });
     
    TeslaFeo, MouseZver и Alesto нравится это.
  5. grach28rus

    grach28rus Новичок

    С нами с:
    1 ноя 2016
    Сообщения:
    6
    Симпатии:
    1
    Код (Javascript):
    1.  $(document).on('click', '.users_sub',  function(e) {
    2.       e.preventDefault;
    3.       var id = $(this).attr('id');
    4.       var element = $(this);
    5.       console.log('unsub');
    6.       $.ajax({
    7.         url: 'index.php?route=profile/subscribe',
    8.         type: 'post',
    9.         data: "data=" + id,
    10.         success: function(response) {
    11.           console.log(response);
    12.           if (response === '1') {
    13.             element.removeClass('users_sub');
    14.             element.addClass('users_unsub');
    15.             element.text('Unsubscribe');
    16.           }
    17.         }
    18.       });
    19.     });
     
    Alesto нравится это.
  6. Alesto

    Alesto Новичок

    С нами с:
    15 янв 2017
    Сообщения:
    72
    Симпатии:
    8
    Шикарно, все работает, спасибо.