javascript - ajax修改html标签成功,但无法使用

标签 javascript jquery ajax django

我有一个html文件,目的是点击标签<a class="favorite"> ,转到<a ="unfavorite"> ,然后再次单击它,它应该变回原始值( <a class="favorite"> ),部分 html 代码如下:

  <div class="extra content" extra_id="{{ article.article.id }}"> 
        {% if user.is_authenticated %}
          {% if collections %}
            {% if article.article.title in collections %}
            <a class="unfavorite">
              <i class="heart icon"></i>
              {{article.article.favorite}}
            </a>
            {% else %}
              <a class="favorite">
                <i class="empty heart icon"></i>
                {{article.article.favorite}}
              </a>
            {% endif %}
          {% else %}
          <a class="favorite">
            <i class="empty heart icon"></i>
            {{article.article.favorite}}
          </a>
          {% endif %}
        {% else %}
          <a class="favorite">
            <i class="empty heart icon"></i>
            {{article.article.favorite}}
          </a>
        {%endif%}
        <span class="right floated">
          <a >
            <i class="comment icon"></i>
              {{ article.comments_num }}
          </a>
        </span>
      </div>

以及部分js代码:

$(".favorite").bind("click",function(){
var id = $(this).parent('.extra.content').attr('extra_id');
$.ajax({
  url:"/api/favorite/",
  data:{"extra_id":id},
  async:false,
  success:function(result){
  if (result.status == 200) {
    $('[extra_id='+ result.article_id +']').find('a.favorite').attr("class","unfavorite");
    $('[extra_id='+ result.article_id +']').find('a.unfavorite').html("<i class='heart icon'></i>"+result.favorite);

  }

  if (result.status == 10020){
    location.href="accounts/login/";
  }
}});
});

$(".unfavorite").bind("click",function(){
var id = $(this).parent('.extra.content').attr('extra_id');
$.ajax({
  url:"/api/unfavorite/",
  data:{"extra_id":id},
  async:false,
  success:function(result){
    if (result.status == 200) {
      $('[extra_id='+ result.article_id +']').find('a.unfavorite').attr("class","favorite");
      $('[extra_id='+ result.article_id +']').find('a.favorite').html("<i class='empty heart icon'></i>"+result.favorite);

    // $('[extra_id='+ result.id +']').find('i.up').attr("class","thumbs up icon");
    }
  }}
);
 });

当点击<a class="favorite">时, $(".favorite"){}运行成功,显示<a class="unfavorite"> ,然后再次单击它,它应该运行 $(".unfavorite"){} ,但不是,仍然运行$(".favorite"){} ,为什么?

最佳答案

您必须使用event-delegation :-

$('.extra.content').on("click",".unfavorite",function(){

   //....rest code as it is

});

注意:- 到处使用 .on() 而不是 .bind()

引用:- Is jquery .bind() deprecated?

关于javascript - ajax修改html标签成功,但无法使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46399352/

相关文章:

javascript - 时刻时区和_zones

javascript - 试图阻止输入到文本区域

javascript - 使用主干 View 在模板上动态添加 ID 和类

javascript - jQuery:将鼠标悬停在子菜单项上时保持子菜单打开

javascript - request.status 和 request.statusCode 之间的区别

javascript - 如何使用 Node js Express 渲染 View 模板

javascript - 找出这个函数在哪里被调用?

javascript - html5的html和javascript?

javascript - Coffeescript 相当于 Python 的 getattr

ajax - 如何从#{cc.clientId} 中提取第一个组件 ID?