2013-03-14 102 views
0

我在javascript中很新,所以我可能看不清我的問題。我試圖創建一個搜索欄,只是搜索說,3個不同的項目。我已經構建了我想要調用的函數,但是我無法在switch語句函數中顯示該函數。如何通過javascript中的switch語句調用函數

function doSearch() { //start doSearch 
searchvalue = document.searchbox.searchterm.value 

switch (searchvalue){ //start switch statement 
    case "4426": buildProduct(); //this is the part that I can't get to work properly. 
       break 
    case "88123": buildProduct(); 
        break 
    case "2400X": buildProduct(); 

    default: alert("Sorry, please try again.") 
       break 
} //end switch statement 

} //end doSearch 

搜索框顯示細膩,它甚至提醒default就好了,但是當我進入4426和點擊,它什麼都不做。我能夠有效地實現它的唯一方法是如果我添加document.writeln (buildProduct);而不是buildProduct()。 而對於形式的HTML是

<FORM NAME="searchbox"> 
    <INPUT TYPE="TEXT" NAME="searchterm"> 
    <INPUT TYPE="BUTTON" VALUE="Search" ONCLICK="Javascript:doSearch()"> 
</FORM> 

編輯: 這就是全部代碼。

function makeHeader() { 
    var data = "<B>" 
    data +="<H1>Computers for Sale:</H1>" 
    data +="</B>" 
    return(data) 
} 
function makeFooter() { 
    var data = "<B>" 
    data +="<small>Copyright 2013 ComputersforSale</small>" 
    data +="</B>" 
    return(data) 
} 
function buildProduct(prodName, prodID, prodDescription) { //start buildProduct 
var data ="<TABLE style='width:100%' BORDER=1 CELLPADDING=10><tr><td>" 
data += makeHeader() 
data += "</td></tr>" 
data += "<tr><td>" 
data += prodName + '</br>' + prodID + '<br>' + prodDescription 
data += "</td></tr>" 
data += "<tr><td>" 
data += makeFooter() 
data += "</td></tr>" 
data += "</table>" 
return(data) 
document.writeln(buildProduct) 
document.close() 

} //end buildProduct 

function doSearch() { //start doSearch 
searchvalue = document.searchbox.searchterm.value 
switch (searchvalue){ //start switch statement 
case "4426": 
    buildProduct(); 
    break; 

case "88123": 
    buildProduct(); 
    break; 

case "2400X": 
    buildProduct(); 
    break; 

default: 
    alert("Sorry, please try again.") 
    break; 
} //end switch statement 

} //end doSearch 

該函數的HTML鏈接:

<a href= "Javascript:buildProduct('HP 4426', '4426','Newest and Best Laptop from HP Computer')">Item #1 HP 4426</a></br> 
<a href= "Javascript:buildProduct('IBM 88123 ThinkPad', '88123','IBM micro Laptop Computer')">Item #2 IBM 88123 ThinkPad</a></br> 
<a href= "Javascript:buildProduct('Dell Dimension 2400', '2400X','A fast 2.4 ghz computer, 80 GB HD, 256 Meg, CDRW and DVD.')">Item #3 Dell Dimension 2400</a> 
+1

是什麼buildProduct()是什麼樣子?這可能是該函數中的一個錯誤。 – DiMono 2013-03-14 04:28:11

+1

你有缺少分號,未聲明的全局變量,雜亂的縮進,不知道它有什麼問題,但我會開始修復這些問題。然後嘗試用控制檯調試你的代碼,看看它是否會給出任何錯誤。 – elclanrs 2013-03-14 04:28:39

+0

所以你實際上沒有'switch',而是你有鏈接。在這種情況下,你沒有對你正在構建的HTML標記做任何事情,正如我在我現在刪除的答案中所述。我不知道你對HTML字符串會發生什麼,但現在你只是忽略它。 – 2013-03-14 05:17:01

回答

4

我覺得突破需要分號(;)在switch語句

+0

我修好了這個休息時間;和其他分號,但它仍然不起作用。 – Leesh 2013-03-14 04:47:53

+0

@Leesh:現在發佈您的更新代碼和buildProduct();方法也... – 2013-03-14 04:49:57

+0

不,OP的'break'沒有分號沒問題 – 2013-03-14 04:53:14

1

您在case "2400X"忘記break也打破需要;

function doSearch(){ 
     searchvalue = document.searchbox.searchterm.value 
     switch (searchvalue){ 
      case "4426": 
      buildProduct(); //this is the part that I can't get to work properly. 
      break; 

      case "88123": 
      buildProduct(); 
      break; 

      case "2400X": 
      buildProduct(); 
      break; 

      default: 
      alert("Sorry, please try again.") 
      break; 
     } 
    } 
+0

不,OP的'break'不需要分號。 – 2013-03-14 04:53:48

1

我想我明白這個問題。考慮以下代碼塊:

switch (expression) { 
     case expression: 

      break; 
     default: 

    } 

您的情況表達式需要匹配switch表達式所期望的值。

所以,如果運行下面的代碼:

var minerals = ['dirt', 'rock', 'gold']; 

for (var i = 0; i < minerals.length; i++) { 

    var mineral = minerals[i]; 

    switch (mineral) { // this will see a string value, in this example, for each item of the array 
     case isGold (mineral): 
      console.log('We struck gold!') 
      break; 
     default: 
      console.log('No gold found. :(') 
    } 

} 

function isGold (mineral) { 
    if (mineral === 'gold') { 
     return 'gold'; // this needs to match what the switch expression sees, which is a string in this case, not a Boolean. 
    } 
} 

這將是輸出:

// -> No gold found. :(
// -> No gold found. :(
// -> We struck gold!