我在一个单独的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的最后一行。
答案 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的帮助。