2011-05-03 73 views
0

在以下代碼:推理碼:+ i +和+ X +

for (i=0; i<itemsinlist.length; i++) { 
     var rating = document.createElement('div'); 
     itemsinlist[i].appendChild(rating); 
     rating.className = "rating"; 
     rating.id = "thumbnails" +i; 

     for (x=0; x<4; x++) { 
     star = document.createElement('span'); 
     star.innerHTML = "&#9733;"; 
     star.className = "star"; 
     star.setAttribute("onclick", "ratingsSet("+i+","+x+");"); 
     rating.appendChild(star); 
} //createratingsstars 

我努力使所述第二參數的感star.setAttribute(),在該行:

star.setAttribute("onclick", "ratingsSet("+i+","+x+");"); 

具體地說,我被+i++x+扔掉了。

起初我以爲這些是增量操作符的某種變體,但後來決定它必須連接某些東西,但我無法弄清楚是什麼/如何。即得到由循環生成的HTML是:

<span class="star" onclick="ratingsSet(0,0);">*</span> 
<span class="star" onclick="ratingsSet(0,1);">*</span> 
<span class="star" onclick="ratingsSet(0,2);">*</span> 
<span class="star" onclick="ratingsSet(0,3);">*</span> 

但我的逆向工程印章都沒有我(如果我有任何開始與)。

幫助?

+1

僅供參考,使用setAttribute方法添加單擊事件處理函數在某些瀏覽器中不起作用。使用'star.onclick = function(){...};'。 – duri 2011-05-03 11:35:44

+1

設置點擊事件是一種非常糟糕的方式。 – Rudie 2011-05-03 11:36:15

回答

3

它是字符串連接。 i是外循環計數器,而x是內循環計數器。它似乎迭代一個集合併爲每個項目創建4個跨度。

+0

啊,我在誤讀'''什麼','我正在將+ i +和+ x +解釋爲用引號括起來,但實際上它們在引號之外,因此連接在一起。謝謝! – Nick 2011-05-03 11:37:39

+2

@Nick:語法突出顯示可以幫助解決這類問題;) – jwueller 2011-05-03 11:46:08

+0

@elusive - 對,我正在使用的編輯器(Espresso)確實突出了它,我只是沒有看它而已,新手錯誤,我知道 – Nick 2011-05-04 02:01:45

0

JavaScript允許使用加號運算符連接字符串和整數(以及AFAIK,任何對象的字符串表示形式)。生成的HTML(帶有嵌入式JavaScript!)就是這樣的:調用ratingsSet()的實例。

3

它放在一起字符串:

"ratingsSet(0,1);" 

價值0是在變量i,和值1是在變量x。如果我們增加一些空間,這可能是更明確:

"ratingsSet(" + i + "," + x + ");" 
0

「+」是一箇中綴操作符連接兩個字符串。

例如:「mor」+「ning」會給出字符串「morning」。

因此,它只是將i或x的值打印到HTML中。

1

至於我可以告訴它遞增ix並設置上點擊元素是屬性:

"ratingsSet("+i+","+x+");" 

然後單擊ratingsSet("+i+","+x+");使用參數之後執行。

奇怪的做法。

+0

謝謝。什麼是「少奇怪」的方法? – Nick 2011-05-03 11:39:49

+2

「ratingSet(」+ i +「,」+ x +「);」'不增加任何東西,它連接這些值。關於這一點? – jwueller 2011-05-03 11:41:31

+0

正確的方法恕我直言將是將事件處理程序附加到元素,而不是添加一個屬性 – Krule 2011-05-03 11:41:48

1

你可以有更多的可讀的代碼:

star.onclick = function() { 
    ratingsSet(i, x); 
}; 

設置事件處理程序,舊的瀏覽器屬性符加上不是很優雅。

-2

我有同樣的問題,現在我知道我犯了一個有趣的錯誤。你必須以像我這樣的錯誤方式閱讀這份聲明。這第二個參數需要一個字符串,所以「ratingsSet(」+ i +「,」+ x +「);」裝置

「ratingsSet(」 +

+ 「 」+
X
+「):」

所以這個參數將成爲一個字符串。沒有+ x +
:)