2014-05-06 23 views
0

在我的HTML我有以下幾點:的JavaScript如果低於不工作

<div class="boxS" data-catTotal="19"></div> 
<div class="boxS" data-catTotal="12"></div> 
<div class="boxS" data-catTotal="4"></div> 
<div class="boxS" data-catTotal="8"></div> 
<div class="boxS" data-catTotal="4"></div> 
<div class="boxS" data-catTotal="1"></div> 

而且我的JavaScript如下:

var sizeBoxMax = null; 
var sizeNew; 
$(".boxS").each(function(){ 

    var sizeBox = $(this).attr("data-catTotal"); 
    alert($(this).attr("data-namez") + " " + sizeBox + " " + sizeBoxMax); 

    if (sizeBox < sizeBoxMax) { 
     sizeNew = (sizeBox/sizeBoxMax) * 100; 
     sizeNew = Math.ceil(sizeNew.toFixed(0)); 
     $(this).attr("style", "width: " + sizeNew + "% !important"); 
    } 

    else { 
     if (sizeBoxMax == null) { 
      sizeBoxMax = $(this).attr("data-catTotal"); 
     } 
     // alert($(this).attr("data-namez") +" "+ sizeBox); 
    } 

}); 

的問題是,if聲明不被訪問,即使sizeBoxMax一直是19。 19,121正在工作正常,但其餘的不受影響。關於我能做什麼的任何想法?我試圖parseInt(),但我只是得到NaN。任何幫助將不勝感激!謝謝。

+0

爲什麼不問我們你真的想做什麼;設置所有元素的寬度等等。有可能更簡單的方法來做到這一點。 – adeneo

+0

如果使用'Number()'而不是'parseInt()',它是否有所作爲? – sbonkosky

+0

嘗試在比較之前檢查sizeBoxMax上的null ... http://jsfiddle.net/5WzVz/ – jsuna

回答

3

極品sizeBoxMax inital值設置爲integer而不是null

你可以看到結果使用int值時jsuna's fiddle工作。

+2

或者是,初始化爲數值! – jsuna

+0

非常好,非常感謝,這工作!它只是需要發生的初始化嗎?因爲我需要遍歷所有的'boxS'類,並找出哪個'data-'具有最大的值,這就是'sizeBoxMax'的值。它需要是動態的,我可以將它設置爲「0」並且它可以正常工作,就像先輸入else語句一樣? – Kenny

1

除了Christopher Marshall's Answer你應該使用jQuery's Data()方法。

var sizeBox = $(this).data("catTotal"); 

sizeBoxMax = $(this).data("catTotal"); 

每次嘗試的字符串到JavaScript值(包括布爾,數字,對象,數組和null)轉換。如果這樣做不會更改值的表示形式,則只會將值轉換爲數字。例如,「1E02」和「100.000」與數字(數值100)等效,但轉換它們會改變它們的表示形式,因此它們保留爲字符串。字符串值「100」被轉換爲數字100.

+0

我遇到了使用.data()引用的問題。 .data()獲得的緩存,並在第二次調用不正確更新變量,但我可能使用它錯了(或什麼) –

+0

同樣的事情在這裏,我嘗試使用'.data()',它不是工作,所以我不得不使用'.attr()'。 – Kenny

+0

確保您不要在數據中使用前綴,例如'data-whatever =「」'='.data(「whatever」)'。 –