2015-11-18 30 views
0

我有一個在一個單獨的JS文件調用checkSubscribed功能去如下:的JavaScript和jQuery的 - 「未捕獲的ReferenceError:無效的左手側分配」關於第二次執行功能

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"; 
    } 
} 

在我的索引html的,我呼籲document.ready像這樣:

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

而且,在一個elment的onclick這個執行:

checkSubscribed('1');

但是,我得到錯誤Uncaught ReferenceError: Invalid left-hand side in assignment不是第一次執行該功能,但在第二次。

我在做什麼錯,我該如何解決?非常感謝您的寶貴時間。

編輯:默認情況下,<category-item>的屬性爲data-is-subscribed="false"

編輯2:錯誤(根據Chrome)在index.html的最後一行。

+2

jQuery和原生DOM調用的混合很奇怪。 – Pointy

+0

@Pointy有沒有辦法用香草JS做到這一點? –

+1

它看起來不像你正在設置點擊事件。如果你的元素有一個類,你可以在你準備好的$('。mycheckboxclass')中做這樣的事情。click(function(){if($(this).attr('isSubscribed')=='false' ){/ * * /}); ......老實說不知道爲什麼你會得到這個奇怪的錯誤......早上對我來說太早了哈哈 – Clay

回答

1

發現我的問題。當我設置data-is-subscribed爲假,我做到了做:

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

相反,我需要使用這樣的:

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

感謝@burflip幫助我意識到,和@Pointy也爲他提供幫助。

+3

再一次,你可以使用'.data()'API:'$(「#cat」+ a).data(「isSubscribed」,false);' - 但不會修改實際元素屬性,只是跟蹤元素元數據的jQuery數據結構。如果你一直使用jQuery來做到這一點,那麼它比修改DOM更有效率。當然,如果你需要*來修改DOM,那麼你現在的代碼很好。 – Pointy

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) 

jQuery將退給你的布爾常量false的屬性值"false"如果您使用的API。使用.attr(),您希望通過其實名(「data-is-subscribed」)查找屬性。

+0

你可以讓'getElementsByTagName('xxx')'給出一個緩存版本或$('xxx')。 }' – andlrc

+0

儘管如此,儘管你的實現仍然給我這個錯誤 –

+0

@KyleHorkley我發佈的代碼真的不能產生這個錯誤,所以它可能發生在別的地方。如果你使用Polymer,錯誤可能發生在組件代碼中 – Pointy

2

如果您已經包含它,而不是使用純Javascript和JQuery的混合,那麼最好使用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); 
    } 
}); 
+0

仍然收到相同的錯誤。 –

+0

您能否在[Pastebin](http://pastebin.com/)中發佈您的完整代碼以幫助我們? – vpedrosa

+0

想通了。看看我的回答:D –

相關問題