2

異なる処理で関数を 2 回宣言する必要があります。上書きについて詳しく説明します。

function test(var){

    //treatments
}

function test(var){

   alert("something" +var);

}

HTMLコードは次のとおりです。

<select name="choices" onchange="test(this)">

    <option value="1">test1</option>
    <option value="2">test2</option>

</select>

すべてを1つの関数にすることなく、両方を機能させるにはどうすればよいですか?

4

3 に答える 3

7

javascript でのメソッド/関数のオーバーライドなどはありません。最後に定義された関数が優先されます。ロジックをさまざまな関数に分割できますが、使用する関数を決定する何らかのメイン関数が必要になります。

ただし、 Javascriptにはswitchステートメントがあるため、問題に適している可能性があります。大きな if/else ブロックよりも少しすっきりします。次のようなものがうまくいくかもしれません。

function test(el){
  switch(el.value){
  case 1:
    alert('option 1 selected');
    break;
  case 2:
    alert('Option 2 selected');
    break;
  default:
    alert('Another option was selected');
  }
}
于 2013-02-11T22:03:25.527 に答える
1

あなたが Java スクリプト ランタイムであると想像してみてください...どうやってそのようなあいまいさを検出しますか? 答えはノーです。同じスコープで同じシグネチャを持つ関数を定義することはできません。

しかし、私のアドバイスは、ある種の「名前空間」を使用することです。

var yourNamespace1 = {

    test: function(var) {
        //treatments
    }
};

var yourNamespace2 = {

    test: function(var) {
        alert("something" +var);
    }
};

これは、キー「テスト」の関数が定義された単純な JS オブジェクトです。

yourNamespace1.test(...)そして、とで関数にアクセスしますyourNamespace2.test(...)

于 2013-02-11T22:12:07.980 に答える
0

ドロップダウンでの選択に基づいて、異なる動作が必要です。これを行う1つの方法は次のとおりです。

<select name="choices" onchange="test(this)">

    <option value="1">test1</option>
    <option value="2">test2</option>

</select>

function test(el)
{
   var num = el.options[el.selectedIndex].value;
   if (num == 1)
   {
       // case 1
   }
   else if (num == 2)
   {
       // case 2
   }
}
于 2013-02-11T22:05:16.763 に答える