JavaScript& jQuery - " Uncaught ReferenceError:赋值中的左侧无效"在第二次执行功能

时间:2015-11-18 22:45:08

标签: javascript jquery html

我在一个单独的JS文件中有一个名为checkSubscribed的函数,如下所示:

function checkSubscribed(a) {
    if ($("#cat" + a).attr("isSubscribed") == "false") {
        document.getElementById("c" + a).className = "catnone style-scope new-category";
        document.getElementById("catitem" + a).className = "categoryitemshown";
    }
}

在我的index.html中,我这样呼叫document.ready

$(function() {
    for (var a = 1; a <= document.getElementsByTagName("category-item").length; a++) {
        checkSubscribed(a.toString());
    }
});

而且,在elment&#39; onclick执行:

checkSubscribed('1');

但是,我在第一次执行函数时没有收到错误Uncaught ReferenceError: Invalid left-hand side in assignment,而是在第二次收到错误。

我做错了什么,我该如何解决?非常感谢你的时间。

修改:默认情况下,<category-item>的属性为data-is-subscribed="false"

编辑2:错误(根据Chrome)位于index.html的最后一行。

3 个答案:

答案 0 :(得分:2)

既然你正在使用jQuery,你可以避免DOM与你期望的不同而不必自己直接编码:

function checkSubscribed(a) {
    if ($("#cat" + a).attr("isSubscribed") == "false") {
        $("#c" + a).removeClass().addClass("catnone style-scope new-category");
        $("#catitem" + a).removeClass().addClass("categoryitemshown");
    }
}

您遇到的问题很可能是由于DOM中没有相关元素中的一个或另一个引起的。如果你从选择器创建一个jQuery对象,并且搜索没有任何结果,那么该对象仍然存在,并且调用它将不会失败。当然,您的页面也不会做任何事情。

编辑以获取您应该使用的data-is-subscribed的值

if ($("#cat" + a).data("isSubscribed") === false)
如果您使用该API,jQuery将为您返回属性值false的布尔常量"false"。使用.attr(),您需要按其真实姓名(“data-are-subscribed”)查找该属性。

答案 1 :(得分:2)

如果已经包含JQuery,那么使用JQuery比使用普通Javascript和JQuery的混合更好。

function checkSubscribed(a) {
    if ($("#cat" + a).attr("isSubscribed") == "false") {
        $("#c" + a).attr("class", "catnone style-scope new-category");
        $("#catitem" + a).attr("class","categoryitemshown");
    }
}

你也可以在这里使用它:

$(function() {
    $("category-item").each(function(k,v) {
        checkSubscribed(k);
    }
});

答案 2 :(得分:1)

发现我的问题。当我将data-is-subscribed设置为false时,我这样做了:

$("#cat" + a).attr("data-is-subscribed") = 'false';

相反,我需要使用它:

$("#cat" + a).attr("data-is-subscribed", "false");

感谢@burflip帮助我认识到这一点以及@Pointy的帮助。