2014-02-24 62 views
0

我是一個新的JavaScript程序員,我最近正在創建一個用戶ID頁面(basicly它說你的名字lenght,您的年齡和,按說你的星座。Javascript - 是否有可能擁有3個「if」變量或者是一個錯誤?

現在的問題是,當我創建籤部分(功能mySigno()),我插2個月可能(里約熱內盧 - 一月和Fevereiro日 - 2月),但我插入相同«如果»馬科 - 3月,該功能甚至不工作

<center><button type="button" onclick="mySigno()">Qual é o meu signo?</button></center> 

<script> 
    function mySigno() 
    { 
    var Signo_baseado_no_mes = prompt("Em que mês nasceste? (ex.: Julho)") 

    if(Signo_baseado_no_mes === "Janeiro") 
    { 
     var Signo_no_mes_de_Janeiro = prompt("Em que dia de Janeiro nasceste? (ex.: 16)") 
    } 

    if(Signo_no_mes_de_Janeiro <= 20) 
    { 
     alert("O teu signo é Capricórnio!") 
    } 

    if(Signo_no_mes_de_Janeiro >= 21) 
    { 
     alert("O teu signo é Aquário!") 
    } 

    if(Signo_baseado_no_mes === "Fevereiro") 
    { 
     var Signo_no_mes_de_Fevereiro = prompt("Em que dia de Fevereiro nasceste? (ex.: 18)") 
    } 

    if(Signo_no_mes_de_Fevereiro <= 19) 
    { 
     alert("O teu signo é Aquário!") 
    } 

    if(Signo_no_mes_de_Fevereiro >= 20) 
    { 
     alert("O teu signo é Peixes!") 
    } 

    if(Signo_baseado_no_mes === "Março") 
    { 
     var Signo_no_mes_de_Março = prompt("Em que dia de Março nasceste? (ex.: 4)") 
    } 

    if(Signo_no_mes_de_Março <= 20) 
    { 
     alert("O teu signo é Peixes!") 
    } 

    if(Signo_no_mes_de_Março >= 21) 
    { 
     alert("O teu signo é Áries!") 
    } 
    } 
</script> 

笑我的代碼後,請儘量解釋一下什麼是錯的,THX

PS:對不起!所有的葡萄牙語電子郵件,在回答時將任何文本更改爲英文都沒有問題(並且對於可能的英語不好也抱歉)。

+0

有一個StackOverflow的專門爲葡萄牙用戶:[pt.stackoverflow.com](http://pt.stackoverflow.com/) – 2014-02-24 21:30:47

+1

看起來工作得很好。 http://jsfiddle.net/yn8vT/ – bertvh

+1

是否有可能在瀏覽器中無法處理像Signo_no_mes_de_Março這樣的變量名?嘗試將變量名稱更改爲「Signo_no_mes_de_Marco」;如果這有效,它可能是一個瀏覽器問題。這就是說,看看@Evgeny Chernyavskiy的回答。 –

回答

2

重構您的代碼 - 它現在按預期工作。第二@ jgitter的意見也是如此。

function mySigno() { 
    var msg = 'Em que dia de %s nasceste? (ex.: 16)'; 
    var month = window.prompt('Em que mês nasceste? (ex.: Julho)'); 
    var day = window.prompt(msg.replace(/%s/, month)); 
    day = parseInt(day, 10); 

    switch (month) { 
    case 'Janeiro': 
    case 'janeiro': 
    if (day <= 20) { 
     window.alert('O teu signo é Capricórnio!'); 
    } else { 
     window.alert('O teu signo é Aquário!'); 
    } 
    break; 
    case 'Fevereiro': 
    case 'fevereiro': 
    if (day <= 19) { 
     window.alert('O teu signo é Aquário!'); 
    } else { 
     window.alert('O teu signo é Peixes!'); 
    } 
    break; 
    case 'Março': 
    case 'março': 
    if (day <= 20) { 
     window.alert('O teu signo é Peixes!'); 
    } else { 
     window.alert('O teu signo é Áries!'); 
    } 
    break; 
    } 
} 
+0

你可能會努力降低'月份'然後你不會需要兩種情況 – Nikola

+0

耶,完全應該這樣做。感謝您指出了這一點 –

2

您的問題的直接答案是,您可以在JavaScript中使用盡可能多的if語句。但是,您應該認識到,在您的示例中,它正在評估這些if語句中的每一個。

由於後面每個月只需要如果它是當月使用的兩種說法,你應該把它們的if語句內,例如:

if(Signo_baseado_no_mes === "Janeiro") 
{ 
    // only do these things if Janeiro 
    var Signo_no_mes_de_Janeiro = prompt("Em que dia de Janeiro nasceste? (ex.: 16)") 


    if(Signo_no_mes_de_Janeiro <= 20) 
    { 
     alert("O teu signo é Capricórnio!") 
    } 
    if(Signo_no_mes_de_Janeiro >= 21) 
    { 
     alert("O teu signo é Aquário!") 
    } 

} 

那不解決不工作的功能,但它至少會運行最少量的代碼。另外請記住,JavaScript會創建在if語句內部聲明的變量,即使您沒有得到它們。這是自動發生的。在你的代碼中現在不應該是一個問題,但是如果你有兩個用'var'聲明的同名變量,即使它們被if塊隔開,它也會出錯。

最後,因爲你說,如果===「里約熱內盧」以及類似的,用戶的輸入必須完全匹配它。大寫字母必須相同,否則將不匹配!

相關問題