2012-02-28 104 views
0

在Javascript中我很新,但我一直在嘗試創建一個使用html select的貨幣轉換器,它工作得很好,但是當調用函數時,它似乎直接跳過if語句直接轉到else {}語句貨幣轉換器! (如果語句)

function convUSD() 
{ 
    RATE_GBP = 0.632111252; 
    RATE_EURO = 0.746435769; 
    RATE_AUD = 0.92945441; 

    if(document.selectBox.slBoxCurrency.selectedIndex == 0 && document.frmCurrencyC.radioUSD.checked) 
    { 
     window.alert("Sorry cant do USD to USD convertion! Please select another value."); 
    } 
    else if(document.selectBox.slBoxCurrency.selectedIndex == 0 && document.frmCurrencyC.radioGBP.checked) 
    { 
     inputBox = parseFloat(document.frmCurrencyC.textInputNum.value); 
     outPutBox = inputBox * RATE_GBP; 
     document.frmCurrencyC.textOutPutTotal.value = outPutBox; 
    } 
    else if(document.selectBox.slBoxCurrency.selectedIndex == 0 && document.frmCurrencyC.radioEURO.checked) 
    { 
     inputBox = parseFloat(document.frmCurrencyC.textInputNum.value); 
     outPutBox = inputBox * RATE_EURO; 
     document.frmCurrencyC.textOutPutTotal.value = outPutBox; 
    } 
    else if(document.selectBox.slBoxCurrency.selectedIndex == 0 && document.frmCurrencyC.radioAUD.checked) 
    { 
     inputBox = parseFloat(document.frmCurrencyC.textInputNum.value); 
     outPutBox = inputBox * RATE_AUD; 
     document.frmCurrencyC.textOutPutTotal.value = outPutBox; 
    } 
    else 
    { 
     window.alert("Whoops there was an error"); 
    } 
} 

第一個If語句正常工作,但是當我真正想要做的例如USD到GBP時,它直接返回else語句。

如果你們發現任何錯誤或任何東西,將不勝感激。

+2

請張貼的HTML表單的代碼引用。如果可以的話,發佈到http://jsfiddle.net – 2012-02-28 00:55:29

+0

http://jsfiddle.net/X8MyF/是完整的html/js代碼,謝謝 – JayJsNewbie 2012-02-28 01:00:43

+1

幾乎所有的代碼都是多餘的。首先,檢查'selectedIndex'。如果非零則退出。接下來,找出檢查複選框的轉換率。現在解析文本,乘以轉換率,然後吐出來。 – 2012-02-28 01:02:52

回答

0

你有你的邏輯混在一起:

首先,你檢查一下你正在轉換到貨幣通過查看該無線電選擇:

function calculateCC() { 
    if (document.frmCurrencyC.radioUSD.checked) { 
     convUSD(); 
    } 
    // etc 
} 

那我就期待您可以查看下拉列表以查看您正在轉換的貨幣,但是您需要檢查收音機,強制下拉列表選擇與「到」貨幣匹配:

function convUSD() { 
    ... 
    if (document.selectBox.slBoxCurrency.selectedIndex == 0 && 
     document.frmCurrencyC.radioGBP.checked) { 
     ... 
    } 
    // etc 
} 

看看你的代碼,看起來在你的第一個函數中,你需要檢查「from」貨幣,而不是「to」貨幣。所以,在calculateCC(),看看下拉列表,而不是單選按鈕:

function calculateCC() { 
    if (document.selectBox.slBoxCurrency.selectedIndex == 0) { 
     convUSD(); 
    } 
    // etc 
} 

工作演示:http://jsfiddle.net/X8MyF/2/

0

如果沒有別的,你可以通過減少if來簡化這一點。運行速度更快,最終調試起來更容易。 這段代碼應該可以幫助你更容易地識別你的bug,雖然沒有看到你的代碼和HTML的其餘部分,但我看不到你原來的代碼失敗的原因。您可以嘗試在jsfiddle.net上設置我們的測試網站並共享鏈接;這讓我們可以完整地測試和調試您的代碼。

function convUSD() 
{ 
    RATE_GBP = 0.632111252; 
    RATE_EURO = 0.746435769; 
    RATE_AUD = 0.92945441; 

    if (document.selectBox.slBoxCurrency.selectedIndex == 0) 
    { 
     if (document.frmCurrencyC.radioUSD.checked) { 
      window.alert("Sorry cant do USD to USD convertion! Please select another value."); 
     } 
     else if (document.frmCurrencyC.radioGBP.checked) { 
      inputBox = parseFloat(document.frmCurrencyC.textInputNum.value); 
      outPutBox = inputBox * RATE_GBP; 
      document.frmCurrencyC.textOutPutTotal.value = outPutBox; 
     } 
     else if (document.frmCurrencyC.radioEURO.checked){ 
      inputBox = parseFloat(document.frmCurrencyC.textInputNum.value); 
      outPutBox = inputBox * RATE_EURO; 
      document.frmCurrencyC.textOutPutTotal.value = outPutBox; 
     } 
     else if (document.frmCurrencyC.radioAUD.checked) { 
      inputBox = parseFloat(document.frmCurrencyC.textInputNum.value); 
      outPutBox = inputBox * RATE_AUD; 
      document.frmCurrencyC.textOutPutTotal.value = outPutBox; 
     } 
     else { 
      window.alert("Whoops there was an error"); 
     } 
    } 
    else { 
     alert("selected index != 0") 
    } 
} 
+0

啊,我看到你已經發布了一個小提琴,但我在這裏確定的改變可能會有所幫助。 – 2012-02-28 01:05:16

+0

我對編碼標準表示歉意,通過教程尋找,本能就是我一直在走的路!我已經注意到你如何簡化未來Russ C的If'聲明!不幸的是,我仍然無法弄清楚爲什麼它仍然跳過其餘的聲明:/ – JayJsNewbie 2012-02-28 01:17:46

+0

沒有道歉;只是試圖提供一些指導,讓你的生活更輕鬆! – 2012-02-28 01:18:34