2016-07-25 5 views
5

Я получил этот код в веточкеИзменить функциональность кнопки JQuery

{% if followsId == null %} 
      <div id="followUser" class="follow" data-userId="{{ profileUserData.id }}" data-currentUserId="{{ loggedUserData.id }}" data-action="follow"> 
       Follow 
      </div> 
{% else %} 
      <div id="unFollowUser" class="follow" data-followsId="{{ followsId }}"> 
       Unfollow 
      </div> 
{% endif %} 

Я просто хотел, чтобы изменить содержание и функциональность кнопки на мыши и попытался этот код JQuery

$('#followUser').click(function() { 
    var userId  = $(this).attr('data-userId'), 
     action  = $(this).attr('data-action'), 
     currentUser = $(this).attr('data-currentUserId'); 

    $.ajax({ 
     method: 'POST', 
     url: "/sci-profile/profile/follow", 
     data: { 
      userId: currentUser, 
      profileUserId: userId, 
      action: action 
     }, 
     success: function(response) 
     { 
      $('#followUser').attr('id', 'unFollowUser') 
          .text('Unfollow') 
          .fadeOut(50) 
          .delay(50) 
          .fadeIn(50); 
     } 
    }); 
}); 

С помощью этого кода на странице источника Я вижу разные идентификаторы и другой текст на кнопке, но при нажатии второй раз я вызываю первую кнопку, как будто она никогда не менялась. Есть ли способ обновить память для этого элемента или я ошибаюсь с самого начала?

+0

I га d нашел решение с этим вопросом: ** http: //stackoverflow.com/questions/38686742/reload-js-function-when-load-element-with-ajax** –

ответ

4

Я думаю, что ваш код должен нравится этот

{% if followsId == null %} 
      <div data-action="follow" class="follow" data-user-id="{{ profileUserData.id }}"> 
       Follow 
      </div> 
{% else %} 
      <div data-action="unfollow" class="follow" data-user-id="{{ followsId }}"> 
       Unfollow 
      </div> 
{% endif %} 

Нет необходимости хранить вошедшего в идентификатор пользователя, потому что вы можете получить его от сессии :)

Ваш Ajax код должен быть, как этот

$('.follow').click(function() { 
    var _this= $(this); 
    var userId = $(this).data('user-id'); 
    var action =$(this).data('action'); 

    $.ajax({ 
     method: 'POST', 
     url: "/sci-profile/profile/follow", 
     data: { 
      profileUserId: userId, 
      action: action 
     }, 
     success: function(response) 
     { 
      if(action=="follow") 
      { 
       _this.attr('data-action', 'unfollow').text('Unfollow'); 
      } 
      else 
      { 
       _this.attr('data-action', 'follow').text('Follow'); 
      } 
     } 
    }); 
}); 

Надеюсь, вам понравится мой ответ и на голоса его, отметьте, как правильно, если это правильно :)

+2

+1, и вы можете использовать '$ (document) .on («click», «follow», function (event) {var $ this = event.target; ..' для динамически добавленных кнопок (ajax, возможно). –

+0

ohk thanks .... Я предположил, что ваш HTML-контент не загружается из AJAX. –

+0

Это не мой вопрос :) Я просто думаю вперед, как если бы это была следующая проблема айзера :) –

Смежные вопросы