1

私は javascript に慣れていないので、自分の問題がはっきりとわからないかもしれません。たとえば、3 つの異なるアイテムを単純に検索する検索バーを作成しようとしています。呼び出しようとしている関数を既に作成しましたが、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);代わりに a を追加することです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>
4

4 に答える 4

4

switch ステートメントでブレークにはセミコロン (;) が必要だと思います

于 2013-03-14T04:29:08.157 に答える
1

あなたは必要を忘れてbreakcase "2400X"また壊します;

   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; 
        }
    }
于 2013-03-14T04:35:32.653 に答える
1

私は問題を理解していると思います。次のコード ブロックを検討してください。

    switch (expression) {
        case expression:

            break;
        default:

    }

case 式は、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!
于 2016-12-30T14:49:50.377 に答える
0

関数が別の場所で必要ない場合は、 IIFE (Immediately Invoked Function Expression)**を使用することもできます(コードの重複を避けるため)。また、IIFE がすぐに戻るため、ブレークを追加する必要はありません。

function reducer (state,action) {
    switch (action.type) {
      case 'increment':
        (function () {
          // do something
        })()
      case 'decrement': 
        return {count: state.count - action.payload}
      case 'reset': 
        return init(action.payload)
      default: 
        throw new Error();
    }
  }
于 2022-03-01T14:26:14.787 に答える