无法使用jQuery在类之间切换

时间:2014-09-30 17:03:32

标签: javascript jquery toggleclass

我在元素类之间切换时遇到了问题 - 可能是愚蠢的,但我找不到答案。 在我的系统中,我显示了一个项目列表。现在我希望能够推广项目,以便它们出现在列表的顶部。我创建了一些可以正常使用的后端基础设施,并在我的前端添加了一些内容:每个项目标题旁边的一个明星(一个带有星星bg的跨度)和一个jQuery脚本应该是:

  1. 聆听'点击'事件 - 当我点击一个明星
  2. 从span
  3. 获取一些数据属性
  4. 将它们发布到我的控制器
  5. 控制器会检查我是否允许宣传商品和回复“真实”'或者' false'
  6. 如果'是'然后我在'金星'之间切换。和'银星'项目的类别
  7. 由于某些原因,课程不会切换 - 只有当我刷新页面时,我才能看到效果。我尝试使用Firebug进行调试 - 它进入切换线,但没有任何反应。

    以下是代码:

    <span class="silver-star promote">
    
     $(".promote").bind("click", function() {
            var $this = $(this);
    
            var itemId = $this.attr("data-id"),
                isPromoted = true;
    
            if ($this.hasClass("gold-star")) {
                isPromoted = false;
            }
    
            $.post('/promoteitems', { itemId: itemId, isPromoted: isPromoted }, function(allowPromotion) {
                if (allowPromotion == true) {
                    $this.toggleClass("silver-star").toggleClass("gold-star");
                }
            });
        });
    

    提前致谢!

2 个答案:

答案 0 :(得分:0)

当您收到回复时,它可能无法将其识别为布尔简单测试将检查响应为字符串

答案 1 :(得分:0)

从您对该问题的评论:

  

... allowPromotion值是&#39; True&#39; (有大写字母T)......

告诉我们它是一个字符串,而不是一个布尔值。您想要if (allowPromotion),因为即使您回来"False",也会切​​换课程。

相反:

if (allowPromotion == "True") { // Note the quotes and capital T
    // ...toggle the classes
}

或者,如果你想允许在未来的某个时间点回到小写字母T的东西:

if (/^\s*true\s*$/i.test(allowPromotion)) {
    // ...toggle the classes
}

它过度设计了它(它将与"True""true"" True " [注意空格],甚至是实际的布尔值一起使用true)...