所以我試圖做一個基于幾個月的切換案例。如果用戶選擇 1,那么它會列印一月。我將所有月份都放在一個陣列中,所以 arr[0] = 一月,但下拉串列中的選擇 1 會列印“一月”。在我的代碼中,我一直在錯誤的月份,它總是落后一個。我已經閱讀了有關 switch 案例的一些檔案,但我認為我誤解了“運算式”。我正在嘗試使用 case switch 來避免使用一堆 if 陳述句。
function months() {
monthText = document.getElementById("month");
var monthNumber = document.getElementById("month_number").value;
var monthsArr = ["January", "February", "March", "April", "May", "June", "July", "August", "September", " October", "November", "December"];
switch (monthNumber) {
//Januari
case monthNumber == "1":
monthText = monthsArr[0];
break;
//Februari
case monthNumber == "2":
monthText = monthsArr[1];
break;
//Mars
case monthNumber == "3":
monthText = monthsArr[2];
break;
//April
case monthNumber == "4":
monthText = monthsArr[3];
break;
//Maj
case monthNumber == "5":
monthText = monthsArr[4]
break;
//Juni
case monthNumber == "6":
monthText = monthsArr[5];
break;
//Juli
case monthNumber == "7":
monthText = monthsArr[6];
break;
//Augusti
case monthNumber == "8":
monthText = monthsArr[7];
break;
//Septembar
case monthNumber == "9":
monthText = monthsArr[8];
break;
//Oktober
case monthNumber == "10":
monthText = monthsArr[9];
break;
//November
case monthNumber == "11":
monthText = monthsArr[10];
break;
//December
case monthNumber == "12":
monthText = monthsArr[11];
break;
}
monthText.value = monthsArr[monthNumber];
console.log(monthsArr[monthNumber]);
}
<form>
<form>
<fieldset>
<select id="month_number" onchange="months()">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
</select>
<input type="text" id="month" value="" size="15" />
uj5u.com熱心網友回復:
這不是 switch 陳述句的作業方式。當您將一個陣列放入您的 switch 陳述句時,您會比較每個 case 陳述句中的整個陣列。
switch ([1, 2, 3]) {
case monthNumber == "1": // evaluates to 'case true:'
// since 'true' is not '[1, 2, 3]' this case-statement is ignored
case [1, 2, 3]:
// since '[1, 2, 3] == [1, 2, 3]' this case-statement is executed
}
因此,在您的 switch 陳述句中,您不應該monthsArr進行檢查,而是monthNumber:
switch (monthNumber) {
case "6":
monthText = monthsArr[5]
}
順便說一句,我認為您可以將完整的切換簡化為以下內容:
monthText = monthsArr[Number(monthNumber)]
uj5u.com熱心網友回復:
不要為此使用開關,因為它很慢。只需使用月份名稱陣列,并使用月份索引
let monthNumber = Number(document.getElementById("month_number").value);
let monthName = ["January", "February", "March", "April", "May", "June", "July", "August", "September", " October", "November", "December"][(monthNumber - 1) % 12];
console.log(monthName);
uj5u.com熱心網友回復:
switch (monthNumber) {
case "1":
monthText = monthsArr[0];
break;
...
uj5u.com熱心網友回復:
請注意,您的 case 運算式之一需要與您打開的值相匹配才能發生某些事情。
由于您使用的是子句 likecase monthNumber == "4":而不是您的案例的值case "4":(這很好),您希望您的案例在您的子句評估為時觸發,true因此這是您應該打開的值:
switch(true) {
//...
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/461593.html
標籤:javascript html
