2011-10-04 58 views
3

我正在爲Javascript編寫一個繪圖/圖形庫,並且遇到了似乎是個大問題。不知所措:Javascript比較錯誤

我具有用於限定最小和該圖形將顯示最大值4個輸入,很像一個TI-84圖形計算器:XMINXMAXYMINYMAX

<div id="window"> 
    <input type="number" class="bound" id="minX" value="" /> 
    <input type="number" class="bound" id="maxX" value="" /> 
    <br /> 
    <input type="number" class="bound" id="minY" value="" /> 
    <input type="number" class="bound" id="maxY" value="" /> 
</div> 

然後我有抓住這些值,並將它們放入功能Plot.setBounds(xMin, xMax, yMin, yMax)每當他們修改後的代碼:

var plot1 = new Plot(); 
$('#window .bound').change(function() { 
    var minX = $('#window #minX').val(), 
     maxX = $('#window #maxX').val(), 
     minY = $('#window #minY').val(), 
     maxY = $('#window #maxY').val(); 
    console.log('modified to:', minX, maxX, minY, maxY); 
    plot1.setBounds(minX, maxX, minY, maxY); 
    plot1.draw(); 
}); 

最後,對於Plot.setBounds(xMin, xMax, yMin, yMax)功能,我有:

Plot.prototype.setBounds = function (xMin, xMax, yMin, yMax) { 
    if ((xMin < xMax) && (yMin < yMax)) { 
     this.bounds = [[xMin, xMax], [yMin, yMax]]; 
    } else { 
     console.error('Plot.setBounds(xMin, xMax, yMin, yMax) requires maximum values that are greater than the minimum values!'); 
     console.log('received:', xMin, xMax, yMin, yMax); 
    } 
    return this; 
}; 

然而,當xMin> = 2且xMax> = 10時,問題就出現了,因爲出於某種原因比較返回了錯誤,因此錯誤被引入控制檯。您可以檢查錯誤前後給出的數字(修改爲收到),並且它們將具有相同的值。

另一個特殊的事實是,如果手動將相同數字的計算放入控制檯,則比較返回true。這使我相信它與函數的調用有關。

這也是值得注意的問題如何只發生在XMIN> = 2,XMAX> = 10

我有一個預覽,你可以在這裏進行測試:http://dl.dropbox.com/u/962292/web/plot.js/static.html

我會很感激無限如果你能找到我的情況的解決方案。

回答

6

你有一個字符串,需要數字:

var minX = +$('#minX').val(), 
    maxX = +$('#maxX').val(), 
    minY = +$('#minY').val(), 
    maxY = +$('#maxY').val(); 

+是一種簡單快速的轉換爲數字。和ID是獨特的#window是無關緊要的。

例如,"9" > "19"; // true

+0

在我所有的時間都用javascript,爲什麼我不知道呢?爲什麼人們只要在字符串前加一個加號就可以使用parseInt? – mowwwalker

+0

@Walkerneo,如果你想在整數你需要parseInt或使用按位或零,'「34.34」| 0; // 34'。 – Joe

+0

我注意到這可能會返回一個字符串,但是從'console.log()'給出的值是另外顯示的。無論如何,我用'+'符號和'parseFloat()'嘗試了兩種方法,而且都沒有效果。我喜歡你的想法,但:D – greenfir3