2017-08-25 133 views
-1

我正在建立一個表單。其中有9個選項的選擇器,全部相似但彼此不同。如何在switch語句之後調用函數?

我打電話calcTotal()功能後,在選擇的每一個變化。 calcTotal有9個開關語句。我想我沒有正確地調用calcTotal函數。因爲在我選擇一個選項後,adultTotalchildTotal未按指定更新,而是顯示爲「未定義」。

每次選擇後如何調用函數? (我有4個在這種情況下,「typeSel」,「c1bed」,「c2bed」,「c3bed」)

$(document).ready(function() { 
    $('#typeSel').on('change', function() { 
     switch (this.value) { 
      case '1': { 
       $("#a1det").show(); 
       $("#cdet,#a2det,#a3det,#a4det").hide(); 
       $("#a1det :input,#adult1").attr("disabled", false); 
       $("#cdet :input,#childr :input,#a2det :input,#a3det :input,#a4det :input,#adult2,#adult3,#adult4").attr("disabled", true); 
       document.getElementById("booktype").value = "1"; 
       document.getElementById("adultNum").value = "1"; 
       document.getElementById("childNum").value = "0"; 
       booktype = 1; 
       return booktype; 
       break; 
      } 

      case '2': { 
       $("#a1det, #a2det").show(); 
       $("#cdet,#a3det,#a4det").hide(); 
       $("#a1det :input,#a2det :input,#adult2").attr("disabled", false); 
       $("#cdet :input,#childr :input,#a3det :input,#a4det :input,#adult3,#adult4").attr("disabled", true); 
       document.getElementById("booktype").value = "2"; 
       document.getElementById("adultNum").value = "2"; 
       document.getElementById("childNum").value = "0"; 
       booktype = 2; 
       return booktype; 
       break; 
      } 

      case '3': { 
       $("#a1det, #a2det, #a3det").show(); 
       $("#cdet,#a4det").hide(); 
       $("#a1det :input,#a2det :input,#a3det :input,#adult1,#adult2,#adult3").attr("disabled", false); 
       $("#cdet :input,#childr :input,#a4det :input,#adult4").attr("disabled", true); 
       document.getElementById("booktype").value = "3"; 
       document.getElementById("adultNum").value = "3"; 
       document.getElementById("childNum").value = "0"; 
       booktype = 3; 
       return booktype; 
       break; 
      } 

      case '4': { 
       $("#a1det, #a2det, #a3det, #a4det").show(); 
       $("#cdet").hide(); 
       $("#a1det :input,#a2det :input,#a3det :input,#a4det :input,#adult1,#adult2,#adult3,#adult4").attr("disabled", false); 
       $("#cdet :input,#childr :input").attr("disabled", true); 
       document.getElementById("booktype").value = "4"; 
       document.getElementById("adultNum").value = "4"; 
       document.getElementById("childNum").value = "0"; 
       booktype = 4; 
       return booktype; 
       break; 
      } 

      case '5': { 
       $("#a1det, #a2det, #cdet, #c1det").show(); 
       $("#a3det,#a4det,#c2det,#c3det").hide(); 
       $("#a1det :input,#a2det :input,#c1det :input, #child1,#adult1,#adult2,#childTotal").attr("disabled", false); 
       $("#child2,#child3,#adult3,#adult4,#a3det :input,#a4det :input,#c2det :input,#c3det :input").attr("disabled", true); 
       document.getElementById("booktype").value = "5"; 
       document.getElementById("adultNum").value = "2"; 
       document.getElementById("childNum").value = "1"; 
       booktype = 5; 
       return booktype; 
       break; 
      } 

      case '6': { 
       $("#a1det, #a2det, #cdet, #c1det, #c2det").show(); 
       $("#a3det,#a4det,#c3det").hide(); 
       $("#a1det :input,#a2det :input,#c1det :input,#c2det :input,#adult1,#adult2,#child1,#child2,#childTotal").attr("disabled", false); 
       $("#child3,#adult3,#adult4,#a3det :input,#a4det :input,#c3det :input").attr("disabled", true); 
       document.getElementById("booktype").value = "6"; 
       document.getElementById("adultNum").value = "2"; 
       document.getElementById("childNum").value = "2"; 
       booktype = 6; 
       return booktype; 
       break; 
      } 

      case '7': { 
       $("#a1det, #a2det, #cdet, #c1det, #c2det, #c3det").show(); 
       $("#a3det,#a4det").hide(); 
       $("#a1det :input,#a2det :input,#c1det :input,#c2det :input,#c3det :input,#adult1,#adult2,#child1,#child2,#child3,#childTotal").attr("disabled", false); 
       $("#adult3,#adult4,#a3det :input,#a4det :input").attr("disabled", true); 
       document.getElementById("booktype").value = "7"; 
       document.getElementById("adultNum").value = "2"; 
       document.getElementById("childNum").value = "3"; 
       booktype = 7; 
       return booktype; 
       break; 
      } 

      case '8': { 
       $("#a1det, #a2det, #a3det, #cdet, #c1det").show(); 
       $("#a4det,#c2det,#c3det").hide(); 
       $("#a1det :input,#a2det :input,#a3det :input,#c1det :input, #child1,#adult1,#adult2,#adult3,#childTotal").attr("disabled", false); 
       $("#child2,#child3,#adult4,#a4det :input,#c2det :input,#c3det :input").attr("disabled", true); 
       document.getElementById("booktype").value = "8"; 
       document.getElementById("adultNum").value = "3"; 
       document.getElementById("childNum").value = "1"; 
       booktype = 8; 
       return booktype; 
       break; 
      } 

      case '9': { 
       $("#a1det, #a2det, #a3det, #cdet, #c1det, #c2det").show(); 
       $("#a4det,#c3det").hide(); 
       $("#a1det :input,#a2det :input,#a3det :input,#c1det :input,#c2det :input,#child1,#child2,#adult1,#adult2,#adult3,#childTotal").attr("disabled", false); 
       $("#child3,#adult4,#a4det :input,#c3det :input").attr("disabled", true); 
       document.getElementById("booktype").value = "9"; 
       document.getElementById("adultNum").value = "3"; 
       document.getElementById("childNum").value = "2"; 
       booktype = 9; 
       return booktype; 
       break; 
      } 
     } 
     return booktype; 
     calcTotal(); 
    }); 

    $('#c1bed').on('change', function() { 
     switch (this.value) { 
      case 'a': { 
       child1 = childa; 
       break; 
      } 
      case 'b': { 
       child1 = childb; 
       break; 
      } 
      case 'c': { 
       child1 = childc; 
       break; 
      } 
      case 'd': { 
       child1 = childd; 
       break; 
      } 
     } 
     document.getElementById("child1").value = child1; 
     calcTotal(); 
     return child1; 
    }); 

    $('#c2bed').on('change', function() { 
     switch (this.value) { 
      case 'a': { 
       child2 = childa; 
       break; 
      } 
      case 'b': { 
       child2 = childb; 
       break; 
      } 
      case 'c': { 
       child2 = childc; 
       break; 
      } 
      case 'd': { 
       child2 = childd; 
       break; 
      } 
     } 
     document.getElementById("child2").value = child2; 
     calcTotal(); 
     return child2; 
    }); 

    $('#c3bed').on('change', function() { 
     switch (this.value) { 
      case 'a': { 
       child3 = childa; 
       break; 
      } 
      case 'b': { 
       child3 = childb; 
       break; 
      } 
      case 'c': { 
       child3 = childc; 
       break; 
      } 
      case 'd': { 
       child3 = childd; 
       break; 
      } 
     } 
     document.getElementById("child3").value = child3; 
     calcTotal(); 
     return child3; 
    }); 
}); 

function calcTotal() { 
    switch (booktype) { 
     case '1': { 
      adultTotal = adult1; 
      childTotal = 0; 
      document.getElementById("adultTotal").value = adultTotal; 
      document.getElementById("childTotal").value = childTotal; 
      break; 
     } 
     case '2': { 
      adultTotal = +adult1 + +adult2; 
      childTotal = 0; 
      document.getElementById("adultTotal").value = adultTotal; 
      document.getElementById("childTotal").value = childTotal; 
      break; 
     } 
     case '3': { 
      adultTotal = +adult1 + +adult2 + +adult3; 
      childTotal = 0; 
      document.getElementById("adultTotal").value = adultTotal; 
      document.getElementById("childTotal").value = childTotal; 
      break; 
     } 
     case '4': { 
      adultTotal = +adult1 + +adult2 + +adult3 + +adult4; 
      childTotal = 0; 
      document.getElementById("adultTotal").value = adultTotal; 
      document.getElementById("childTotal").value = childTotal; 
      break; 
     } 
     case '5': { 
      adultTotal = +adult1 + +adult2; 
      childTotal = +child1; 
      document.getElementById("adultTotal").value = adultTotal; 
      document.getElementById("childTotal").value = childTotal; 
      break; 
     } 
     case '6': { 
      adultTotal = +adult1 + +adult2; 
      childTotal = +child1 + +child2; 
      document.getElementById("adultTotal").value = adultTotal; 
      document.getElementById("childTotal").value = childTotal; 
      break; 
     } 
     case '7': { 
      adultTotal = +adult1 + +adult2; 
      childTotal = +child1 + +child2 + +child3; 
      document.getElementById("adultTotal").value = adultTotal; 
      document.getElementById("childTotal").value = childTotal; 
      break; 
     } 
     case '8': { 
      adultTotal = +adult1 + +adult2 + +adult3; 
      childTotal = +child1; 
      document.getElementById("adultTotal").value = adultTotal; 
      document.getElementById("childTotal").value = childTotal; 
      break; 
     } 
     case '9': { 
      adultTotal = +adult1 + +adult2 + +adult3; 
      childTotal = +child1 + +child2; 
      document.getElementById("adultTotal").value = adultTotal; 
      document.getElementById("childTotal").value = childTotal; 
      break; 
     } 
    } 
    totalFare = +adultTotal + +childTotal; 
    document.getElementById("totalFare").value = totalFare; 
} 
+5

這是你的實際邏輯嗎?我問第一個'switch'是完全多餘的,只需使用'return this.value' - 事實上,所有的switch語句看起來相當冗餘。這段代碼究竟應該做什麼?這將有助於看到一個工作示例,或者至少可以看到您的HTML。 –

+0

第一個switch語句在每種情況下都有一些其他語句,我現在隱藏了這些語句以減少代碼。 –

+1

請顯示您的實際代碼。這種減少的樣本幾乎沒有意義,似乎只是提出更多的問題。 –

回答

2

我只集中在第一開關上,因爲你的代碼是真的混亂和難以遵循..

說明

calcTotal()必須是beforreturn。返回語句將跳出該函數,並且它下面的任何內容都不會執行。

代碼

switch是非常多餘。你想要做的只是返回你的value作爲number。你可以用Number(this.value)來實現。爲了您的回報,您必須致電calcTotal()

$('#typeSel').on('change', function() { 
    calcTotal(); 
    return Number(this.value); 
}); 
+0

我更新了代碼。 –

+0

我實際上在switch語句中有一些其他的東西,我隱藏了它來減少代碼。我已經更新它並在返回值無效之前調用該函數。 –

+0

我再次嘗試過,這次它工作。 –