【问题标题】:Why this isn't this AJAX function changing color?为什么这个 AJAX 函数不改变颜色?
【发布时间】:2016-09-24 06:43:29
【问题描述】:

我想要做的是我有字形框,如果有通知,我希望该框根据通知的计数改变其颜色。我想我快到了,但它就是行不通。我检查了,但 CSS 没有通过。所以这就是我所做的。

我在导航栏中有这个

  <li class="dropdown">
<a href="#" class="dropdown-toggle notification-toggle" data-toggle="dropdown" role="button" aria-expanded="false" id="button">
<span class='glyphicon glyphicon-inbox' aria-hidden="true"></span>
<span class="caret"></span></a>
              <ul class="dropdown-menu" role="menu" id='notification_dropdown'>

              </ul>
            </li>

所以 glyphicon-inbox 需要随着计数改变颜色。

为了实现我有这个代码

<script>
    $(document).ready(function(){
      $(".notification-toggle").click(function(e){
        e.preventDefault();
        $.ajax({
          type: "POST",
          url: "{% url 'get_notifications_ajax' %}",
          data: {
            csrfmiddlewaretoken: "{{ csrf_token }}",
          },
         success: function(data){
            $("#notification_dropdown").html(' <li role="presentation" class="dropdown-header">Notifications</li>');
            var count = data.count
            console.log(count)
            if (count == 0) {
                  $("#notification_dropdown").removeClass('notification');
              var url = '{% url "notifications_all" %}'
              $("#notification_dropdown").append("<li><a href='" + url+ "'>View All Notifications</a></li>")
            } else {
                  $("#notification_dropdown").addClass('notification');
              $(data.notifications).each(function(){
                var link = this;
                $("#notification_dropdown").append("<li>" + link + "</li>")
              })
            }
            console.log(data.notifications);
          },
          error: function(rs, e) {
            console.log(rs);
            console.log(e);
          }
        })
      })
    })
    </script>

如果通知计数 == 0,我有

$("#notification_dropdown").removeClass('notification');

其他

          $("#notification_dropdown").addClass('notification');

对于 CSS,我有这个

#notification_dropdown{
}

#notification_dropdown.notification{
  background-color: red;
}

如您所见,颜色应该是红色的,但它不起作用。我想我需要将用于 glyphicon-box 的#button 放在某个地方,但我不知道。另外,我不确定如何让 count 出现在框中。

如果我在控制台中使用$("#notification_dropdown"),我会得到

<ul class="dropdown-menu notification" role="menu" id="notification_dropdown"> <li role="presentation" class="dropdown-header">Notifications</li><li><a href="/notifications/164/?next=/post/test0/">content</a></li><li><a href="/notifications/165/?next=/post/test0/">content</a></li></ul>

我正在尝试让它像 Stack Overflow 一样,通知框会随着计数而改变颜色 - 这可能吗?

【问题讨论】:

  • $.ajax 配置选项中使用dataType: 'json' 或在success 回调中使用JSON.parse() 手动将字符串解析为JSON。
  • 你得到了 console.log(count).. 的价值吗?
  • 您是否检查过 data.count 是否有任何值。还尝试将您的 css 更改为仅 .notification 而不是 #notification_dropdown.notification
  • @Tushar 你能在答案中证明这一点吗?我一定会试试的
  • @DemoUser 是的,我看到了计数...只是不知道如何显示

标签: javascript jquery html css ajax


【解决方案1】:

要更改字形图标的颜色 - 您需要更改颜色属性而不是背景:

#notification_dropdown.notification{
  color: red;
}

【讨论】:

  • 这就是改变glyhicon颜色的方法——它必须是你正在使用的选择器或确定类的逻辑。尝试将此样式规则作为内联样式规则添加到字形图标以确认颜色更改,然后向后工作以找出如何选择它/修改它
  • 嗯,谢谢...我试过了...试图像那样绕着我的头,但失败了,所以我实际上在这里发布了:)...
  • 请注意,“#notification_dropdown.notification 不会以字形图标为目标,因为它不是 notification_dropdown 的一部分 - 它位于其上方,因此必须直接定位,或作为“#button”的后代或作为 notification_dropdown 的兄弟。
  • 所以我应该在 glyphicon 上设置 id 并将其作为目标?
  • 你可以 - 或者你可以使用“#button span”,但这会同时得到 glypicon 和 chevron - 所以你可以使用 :first... 或者在 glypicon 上放置一个 id / class
【解决方案2】:

在整个 html 中是否存在任何具有相同 id 'notification_dropdown' 的元素?请检查 html 并按此 ID 查找。它可能是隐藏的形式。在这种情况下,css 可能会被应用到隐藏元素而不是可见元素。

如果是,请尝试:

$("#notification_dropdown:visible").removeClass('notification');

$("#notification_dropdown:visible").addClass('notification');

试试这个:

setTimeout(function(){
   $("#notification_dropdown:visible").addClass('notification');
}, 2000);

【讨论】:

  • 控制台是否有任何错误? ajax 响应正常吗?
  • 不,我只是没有得到任何 CSS 或任何东西......没有任何改变......我的猜测是我应该将 id 设置为通知框(glyphicon 本身,但这并没有这样做要么)
  • 谢谢你,但说真的,我不知道发生了什么我没有收到任何错误或任何东西..
  • 不幸的是没有,它什么也没做......嗯......真的不知道我应该做什么......也许我应该创建一个新图标,当通知出现时显示......
猜你喜欢
  • 2018-10-08
  • 2021-06-26
  • 2015-10-27
  • 2019-01-27
  • 1970-01-01
  • 1970-01-01
  • 2016-08-12
  • 2020-10-13
  • 2012-02-19
相关资源
最近更新 更多