2012-12-27 23 views
-3
// convert the number to it's standard value (kilogram) 
standard = parseFloat(unit/from); 
// now convert it to the new measurement unit 
converted = parseFloat(standard * eval(to)); 

http://jsfiddle.net/zeByX/23/除法和乘法,如果數量少於1

如果輸入多個更小的數字,例如「0.234234234」,並嘗試通過改變下拉轉換到一個新的單位拋出錯誤。任何小於1的數字都會歸零。

任何想法這裏發生了什麼?

+5

爲什麼'eval''eval''eval' ??? – elclanrs

+0

總是在問題本身**中引用相關代碼**的所有***,不要只是鏈接。 –

+0

使用eval是因爲我從輸入中獲取數據單元,基本上告訴我要使用哪個變量:克,千克等。 – ditto

回答

2

雖然錯誤是因爲在這裏你應該用parseFloat()parseInt()的使用造成的,還有很多更多與您的代碼。

  • eval()是邪惡的,你使用它,你甚至不需要它,或者可以很容易地用一個更好的解決方案來代替它。
    • eval(to)是不必要的,因爲to已經是一個數字。
    • 在其他情況下,eval時使用了一個字符串來訪問一個全局變量。這是一個非常糟糕的主意,並且它更適合於存儲在一個對象的單元/值映射文字,如var units = { gram: 1000, kilogram: 1, ... }然後,您可以簡單地使用字符串作爲索引,如unit["milligram"]訪問值。
  • 你不需要parseFloat()當你已經有一個數字,如用unit/fromstandard * to)
  • 在函數的所有變量聲明(除了from)是全球性的,因爲你錯過了var關鍵字在前面。

這是一個"fixed" fiddle

0

使更改代碼在try塊和捕獲異常,看看有什麼是錯的。

你可以使用選擇列表中的值選項轉換單元從黎民轉換單元存儲。

0

居然還有沒有錯誤拋出..


您所描述的具體問題,是因爲你做

unit = parseInt($('#weight_value').val()); 

因此,如果一個值是0和1之間就變爲0更改它到

unit = parseFloat($('#weight_value').val()); 

除此之外,有無效的HTML(喜歡自行閉合select標籤,並公開留下label),你正在使用eval,你真的不應該(作爲解釋/強調在評論

2

這裏是如何爲了避免eval,並讓你的代碼更清晰,更明顯,希望這有助於理解你的代碼爲什麼錯了,以及爲什麼IMO應該回到基礎知識,並從評論中的建議開始。你可以從MDN開始。

var units = { 
    milligram: 1000000, 
    carrat: 5000, 
    gram: 1000, 
    kilogram: 1, 
    ounce: 35.27399072294044, 
    pound: 2.2046244201837775, 
    stone: 0.157473, 
    ton: 0.001 
}; 

var $input = $('#weight_value');  

$('#weight_unit').change(function() { 

    var from = $input.data('unit'), 
     to = $(this).val(), 
     standard = $input.val()/units[ from ], 
     converted = standard * units[ to ]; 

    $input.val(converted).data('unit', to); 

}); 

另外請注意,我沒有使用parseFloatparseInt,我只是把JavaScript的強制類型轉換的優勢。

演示:http://jsfiddle.net/zeByX/30/

+0

不錯的類型強制! –