2017-01-16 126 views
-1

我正在創建一個簡單的網站,它需要一個隨機生成的數字並基於該數字,它會相應地更改段落的文本。我正在測試已解決的空值。然而,文本應該是大寫或不是基於它是否在句子的開頭或結尾。我似乎無法解決這個問題。我的jsfiddle鏈接低於:如果語句不能正常工作

https://jsfiddle.net/MCBlastoise/n2vh40ah/

而且下面是我的代碼片段:

.heading { 
 
    text-align: center; 
 
    font-family: Courier New; 
 
    color: green; 
 
    font-weight: bold; 
 
} 
 
.button { 
 
    width: 250px; 
 
    height: 250px; 
 
    border-style: solid; 
 
    border-color: red; 
 
    border-width: 5px; 
 
    border-radius: 60px; 
 
    margin: auto; 
 
    text-align: center; 
 
    position: relative; 
 
} 
 
.button:hover { 
 
    background-color: #7CFC00; 
 
    cursor: pointer 
 
} 
 
.button-text { 
 
    font-family: Courier New; 
 
    color: #9400D3; 
 
    font-size: 76px; 
 
    line-height: 140%; 
 
} 
 
.text { 
 
    color: red; 
 
    font-family: Futura, Trebuchet MS, Arial, sans-serif; 
 
    font-size: 21px; 
 
} 
 
#compliment { 
 
    text-align: center; 
 
    font-family: Candara, Calibri, Segoe, Segoe UI, Optima, Arial, sans-serif; 
 
    color: #ffd400; 
 
    font-size: 40px; 
 
    font-weight: bold; 
 
    margin-top: -20px; 
 
} 
 
.hover { 
 
    width: 108px; 
 
    height: 100px; 
 
    background-color: orange; 
 
    border-style: solid; 
 
    border-color: black; 
 
    border-width: 5px; 
 
    text-align: center; 
 
    margin-top: -30px; 
 
    margin-left: 1175px; 
 
    position: absolute; 
 
} 
 
.block-text { 
 
    color: red; 
 
    font-family: Futura, Trebuchet MS, Arial, sans-serif; 
 
    font-size: 16px; 
 
    font-weight: bold; 
 
}
<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <link type="text/css" rel="stylesheet" href="Complement.css"> 
 
    <title>The Compliment Machine</title> 
 
</head> 
 

 
<body> 
 
    <h2 class="heading">The Compliment Machine</h2> 
 
    <p class="text">In the interest of spreading holiday cheer, I have designed this website with one goal in mind. With the assumption that you have already inputted your name, pressing the button below will randomly generate a compliment. Hopefully, this little experiment 
 
    will brighten up your day.</p> 
 
    <div class="button" onclick="inspire()" id="disappear"> <span class="button-text">Click me!</span> 
 
    </div> 
 
    <br style="line-height:500%"> 
 
    <p id="compliment"></p> 
 

 
    <script> 
 
    var userName = prompt("What is your name?"); 
 
    var compliment1 = "Have a nice day"; 
 
    var compliment2 = "you contribute to society"; 
 
    var compliment3 = "Always be yourself"; 
 
    var compliment4 = "you are a wonderful person"; 
 
    var compliment5 = "Keep up the good work"; 
 
    var compliment6 = "never stop believing in yourself"; 
 
    var compliment7 = "you have a great sense of humor"; 
 
    var compliment8 = "You should feel proud of yourself"; 
 
    var compliment9 = "Never stop trying"; 
 
    var compliment10 = "you are a winner"; 
 
    </script> 
 

 
    <script> 
 
    function inspire() { 
 
     var result = Math.random(); 
 

 
     //This code block checks for null, undefined, and other falsy values in the prompt. 
 
     if (userName === null || userName === undefined || userName === "" || !userName) { 
 
     if (0 <= result && result < 0.11) { 
 
      userName = "friend"; 
 
     } 
 
     if (0.21 <= result && result < 0.31) { 
 
      userName = "friend"; 
 
     } 
 
     if (0.41 <= result && result < 0.51) { 
 
      userName = "friend"; 
 
     } 
 
     if (0.71 <= result && result < 0.81) { 
 
      userName = "friend"; 
 
     } 
 
     if (0.81 <= result && result < 0.91) { 
 
      userName = "friend"; 
 
     } 
 
     if (0.11 <= result && result < 0.21) { 
 
      userName = "Friend"; 
 
     } 
 
     if (0.31 <= result && result < 0.41) { 
 
      userName = "Friend"; 
 
     } 
 
     if (0.51 <= result && result < 0.61) { 
 
      userName = "Friend"; 
 
     } 
 
     if (0.61 <= result && result < 0.71) { 
 
      userName = "Friend"; 
 
     } 
 
     if (0.91 <= result && result < 1) { 
 
      userName = "Friend"; 
 
     } 
 
     } 
 

 
     //This code block changes the sentence with ID 'compliment' randomly, based on the value of the variable 'result'. 
 
     if (0 <= result && result < 0.11) { 
 
     document.getElementById("compliment").innerHTML = compliment1 + ", " + userName + "!"; 
 
     }; 
 
     if (0.11 <= result && result < 0.21) { 
 
     document.getElementById("compliment").innerHTML = userName + ", " + compliment2 + "."; 
 
     }; 
 
     if (0.21 <= result && result < 0.31) { 
 
     document.getElementById("compliment").innerHTML = compliment3 + ", " + userName + "."; 
 
     }; 
 
     if (0.31 <= result && result < 0.41) { 
 
     document.getElementById("compliment").innerHTML = userName + ", " + compliment4 + "."; 
 
     }; 
 
     if (0.41 <= result && result < 0.51) { 
 
     document.getElementById("compliment").innerHTML = compliment5 + ", " + userName + "!"; 
 
     }; 
 
     if (0.51 <= result && result < 0.61) { 
 
     document.getElementById("compliment").innerHTML = userName + ", " + compliment6 + "."; 
 
     }; 
 
     if (0.61 <= result && result < 0.71) { 
 
     document.getElementById("compliment").innerHTML = userName + ", " + compliment7 + "."; 
 
     }; 
 
     if (0.71 <= result && result < 0.81) { 
 
     document.getElementById("compliment").innerHTML = compliment8 + ", " + userName + "."; 
 
     }; 
 
     if (0.81 <= result && result < 0.91) { 
 
     document.getElementById("compliment").innerHTML = compliment9 + ", " + userName + "."; 
 
     }; 
 
     if (0.91 <= result && result < 1) { 
 
     document.getElementById("compliment").innerHTML = userName + ", " + compliment10 + "."; 
 
     }; 
 
    } 
 
    </script> 
 

 
</body> 
 

 
</html>

+2

不完全是一種恭維,但請熟悉[陣列(https://developer.mozilla.org/en-US/docs/Learn/JavaScript/First_steps/Arrays)。如何解決這個問題,以小寫形式硬編碼所有內容,並使用CSS開始用大寫字母開頭的句子。 – Teemu

+0

是的,我剛剛想到了一點點 – MCBlastoise

回答

1

那麼,它的實際工作,但後一個條件「恭維」userName不再爲空或未定義,因此您的外部if塊將不會再次觸發。如果您想每次重新指定userName,則可以使用布爾值來檢查當前userName是由用戶還是您的代碼實際選擇的。

的代碼看起來是這樣的:

var userName = prompt("What is your name?"); 
 
//We still use your userName-check, but we store the result in a variable so we can access it everytime the user clicks the button 
 
var generatedUsername = userName === null || userName === undefined || userName === "" || !userName; 
 
var compliment1 = "Have a nice day"; 
 
var compliment2 = "you contribute to society"; 
 
var compliment3 = "Always be yourself"; 
 
var compliment4 = "you are a wonderful person"; 
 
var compliment5 = "Keep up the good work"; 
 
var compliment6 = "never stop believing in yourself"; 
 
var compliment7 = "you have a great sense of humor"; 
 
var compliment8 = "You should feel proud of yourself"; 
 
var compliment9 = "Never stop trying"; 
 
var compliment10 = "you are a winner"; 
 

 

 
function inspire() { 
 
    var result = Math.random(); 
 
    //This code block changes the username if it was chosen by code 
 
    if (generatedUsername) { 
 
     if (0 <= result && result < 0.11) { 
 
      userName = "friend"; 
 
     } 
 
     if (0.21 <= result && result < 0.31) { 
 
      userName = "friend"; 
 
     } 
 
     if (0.41 <= result && result < 0.51) { 
 
      userName = "friend"; 
 
     } 
 
     if (0.71 <= result && result < 0.81) { 
 
      userName = "friend"; 
 
     } 
 
     if (0.81 <= result && result < 0.91) { 
 
      userName = "friend"; 
 
     } 
 
     if (0.11 <= result && result < 0.21) { 
 
      userName = "Friend"; 
 
     } 
 
     if (0.31 <= result && result < 0.41) { 
 
      userName = "Friend"; 
 
     } 
 
     if (0.51 <= result && result < 0.61) { 
 
      userName = "Friend"; 
 
     } 
 
     if (0.61 <= result && result < 0.71) { 
 
      userName = "Friend"; 
 
     } 
 
     if (0.91 <= result && result < 1) { 
 
      userName = "Friend"; 
 
     } 
 
    } 
 
\t \t 
 
    //This code block changes the sentence with ID 'compliment' randomly, based on the value of the variable 'result'. 
 
    if (0 <= result && result < 0.11) { 
 
     document.getElementById("compliment").innerHTML = compliment1+", "+userName+"!"; 
 
    }; 
 
    if (0.11 <= result && result < 0.21) { 
 
     document.getElementById("compliment").innerHTML = userName+", "+compliment2+"."; 
 
    }; 
 
    if (0.21 <= result && result < 0.31) { 
 
     document.getElementById("compliment").innerHTML = compliment3+", "+userName+"."; 
 
    }; 
 
    if (0.31 <= result && result < 0.41) { 
 
     document.getElementById("compliment").innerHTML = userName+", "+compliment4+"."; 
 
    }; 
 
    if (0.41 <= result && result < 0.51) { 
 
     document.getElementById("compliment").innerHTML = compliment5+", "+userName+"!"; 
 
    }; 
 
    if (0.51 <= result && result < 0.61) { 
 
     document.getElementById("compliment").innerHTML = userName+", "+compliment6+"."; 
 
    }; 
 
    if (0.61 <= result && result < 0.71) { 
 
     document.getElementById("compliment").innerHTML = userName+", "+compliment7+"."; 
 
    }; 
 
    if (0.71 <= result && result < 0.81) { 
 
     document.getElementById("compliment").innerHTML = compliment8+", "+userName+"."; 
 
    }; 
 
    if (0.81 <= result && result < 0.91) { 
 
     document.getElementById("compliment").innerHTML = compliment9+", "+userName+"."; 
 
    }; 
 
    if (0.91 <= result && result < 1) { 
 
     document.getElementById("compliment").innerHTML = userName+", "+compliment10+"."; 
 
    }; 
 
}

不過,你真的應該考慮簡化你的代碼,因爲許多段重複了一遍又一遍。

+0

這看起來像我正在尋找,但我不知道如何寫這個。你能給我一些示例代碼嗎? – MCBlastoise

+0

@MCBlastoise是的,給我兩分鐘,我會更新我的答案;-) – sandbo00

+0

@MCBlastoise完成! – sandbo00

0

您可以使用JavaScript .toUpperCase()方法的字符轉換爲大寫。

如果你想利用整個單詞,使用方法:

string.toUpperCase() 

如果你只想大寫單詞的第一個字母,可使用:

string.charAt(0).toUpperCase() + string.slice(1) 

其中string是文本你想要大寫。

+0

會有一種簡單的方法來使用'.toUpperCase()'方法將字符串的一部分更改爲大寫? – MCBlastoise

+0

是的,可能的。代碼編輯。 –

0

你可以嘗試使用else if block。

例如爲:

if (0 <= result && result < 0.11) { 
    document.getElementById("compliment").innerHTML = compliment1 + ", " + userName + "!"; 
} else if (0.11 <= result && result < 0.21) { 
    document.getElementById("compliment").innerHTML = userName + ", " + compliment2 + "."; 
} else if (0.21 <= result && result < 0.31) { 
    document.getElementById("compliment").innerHTML = compliment3 + ", " + userName + "."; 
}; 

等。

+0

這在這裏沒用,因爲這實際上不是問題。使用else - 如果在這種情況下會產生相同的結果。 – sandbo00

0

給予讚美之前大寫你的名字 即

function capitalizeFirstLetter(name) { 
    return name.charAt(0).toUpperCase() + name.slice(1); 
} 

前加

userName = capitalizeFirstLetter(userName); 

你如果在這裏你改變innerHTMLs

0

嘗試像這樣。首先將名稱更改爲小寫。然後選取第一個字符變成大寫字母,並替換第一個字符,並獲取第一個字符爲大寫字母的名稱。

var userName = prompt("What is your name?"); 

var lower = username.toLowerCase();//changes to all characters at lower (because if input is aBcX then it changes to abcx) 

var first = username.slice(0,1); //now outputs first character(a in abcx) 
var finalname = username.replace(first,first.toUpperCase(first));//outputs Abcx