1

誰かがこの if else ステートメントで私を助けることができますか....

コーディング

<script>
$("#id_add_select").change(function(){
    if($("#id_add_select" == "2")){
        handler(1)
    } else {
        handler(2) 
    } 
}); 


function handler(situation){
var situation = situation;
    switch (situation)
    case 1:
          display: (".name")
          display: (".address")
    case 2:
          disable: (".age")
          disable: (".email")   
}
</script>

HTMLコーディング

<html>
 ------

<select name="add_select" id="id_add_select">
        <option value="1">working</option>
        <option value="2">not working</option>
        <option value="3">retired</option>
</select>

 ------- 

私の状況では、2「機能しない」を選択するとケース1が表示されます。それ以外の場合はケース2が表示されます。基本的なものですが、わかりません。どうもありがとう。

4

7 に答える 7

3

これは正しくないです:

if($("#id_add_select" == "2")){

あなたはおそらく次のようなことをしたいと思うでしょう:

if($(this).val() == 2) {

コードでさらに最適化を行うことができますが、これは正しい方向である必要があります。

$("#id_add_select").change(function(){
    if($(this).val() == 2){
        handler(1)
    } else {
        handler(2) 
    } 
});

代替ソリューション

IMO、関数でマップオブジェクトを使用することは、あなたのケースで switch ステートメントを使用するよりもきれいです。だから私はおそらく次のようなことをするでしょう:

var actions = {
    1: function() {
        // first choice logic
    },
    2: function() {
        // second choice logic
    }
};

$("#id_add_select").change(function() {
    actions[this.value]();
});

デモ: http://jsfiddle.net/PurjS/

于 2012-10-15T10:51:00.380 に答える
2

if($("#id_add_select" == "2")){=>if($("#id_add_select").val() == "2"){

于 2012-10-15T10:51:55.250 に答える
2

まず第一に、あなたは何の価値も得ていません:

  <script>
  $("#id_add_select").change(function(){
     if($("#id_add_select").val()==2){
     handler(1);
   } else {
     handler(2);
    } 
  }); 
  </script>

switch ループのすべてのケースの後に break ステートメントを入れることを忘れないでください。

于 2012-10-15T10:53:16.653 に答える
1

特定のことがうまくいかない理由を理解する

$("#id_add_select" == "2")

どうやら、選択した要素の値が であるかどうかを確認するつもりでした2。ただし、jQuery がどのように機能するかを知らなくても、これが機能しないことは明らかです。

このためには、ステートメントをその本質的な部分に分解する必要があります。

$()1 つの引数を渡すことによって実行する関数呼び出しがあります: "#id_add_select" == "2".

関数への引数は実際の呼び出しから完全に独立していることに気付きます。これはすべての関数呼び出しに当てはまります。これが意味することは、比較の結果が渡されるということです。比較の両方のオペランドがリテラルであるため、式を自分で評価して定数に置き換えることができます:"#id_add_select" == "2"は明らかに等しくないため、結果は になりますfalse

これは次のように書くことと同じであると結論付けます$(false)。ここから、このコードが任意の要素に値があるかどうかをチェックできないことは明らかです2


他の答えに加えて、注意してください

スイッチ/ケースの仕組み

JavaScript のswitch/caseステートメントにはフォールスルー動作があることに注意してください。

これは、case値が input と一致するために句が実行されると、文にxヒットして構造を終了するまで、その下のすべてのコードを実行することを意味します。break;switch/case

以下の例では、実行printTo5Or8(1)しても after が終了せず、ステートメントまでconsole.log(1)「フォールスルー」します!console.log(2);break;

function printTo5Or8(x) {
    switch(x){
        case 1: 
            console.log(1); 
        case 2: 
            console.log(2);
        case 3: 
            console.log(3);
        case 4: 
            console.log(4);
        case 5: 
            console.log(5);
            break;
        case 6:
            console.log(6);
        case 7:
            console.log(7);
        case 8:
            console.log(8);

    }
}
printTo5Or8(1); // Prints 1 2 3 4 5
printTo5Or8(3); // Prints 3 4 5
printTo5Or8(6); // Prints 6 7 8
printTo5Or8(7); // Prints 7 8

無効な構文

ステートメントにはswitch/caseブロックが必要です: { statements; }to follow after switch(expression)! あなたは何も持っていません。


display: (".name")
display: (".address")

あなたはおそらく意味しdisplay(".name");た。現時点では、何もしないラベルがあります。

冗長コード

function handler(situation){
    var situation = situation; // <-- Remove

仮パラメータ リスト(situation)はすでにローカル変数を宣言していますsituation。宣言する必要はありません。

結論

JavaScript を言語として学ぶことに力を注ぐことをお勧めします。JavaScript がどのように機能するかを知ることは、コードについて推論し、これまで機能しなかった「不可能な」コードをルール化するのに役立ちます。プログラミング言語 (この場合は JavaScript) がどのように機能するかをよく理解していないと、プログラミングは魔法の呪文を混ぜ合わせているように感じられます。

プログラミングは正確な科学であり、推測や運ではありません。

于 2012-10-15T11:13:18.697 に答える
0

最適化された愛の一部:

$("#id_add_select").change(handler);

var handler = function () {
    switch (this.value) {
        case 1:
            display(".name");
            display(".address");
            break;
        default:
            disable(".age");
            disable(".email");
            break;
    }
};

またはこのように:

$("#id_add_select").change(function () {
    switch (this.value) {
        case 1:
            display(".name");
            display(".address");
            break;
        default:
            disable(".age");
            disable(".email");
            break;
    }
});

またはこのように:

$("#id_add_select").change(function () {
    if (this.value === "1") {
        display(".name");
        display(".address");
    } else {
        disable(".age");
        disable(".email");
    }
});

また、表示と無効化のメソッドが必要であることを忘れないでください(ただし、コードが自分のように見えるので、すでに作成していると思います)

于 2012-10-15T11:00:56.663 に答える
0

私はこのコードがよりきれいだと思います:

<script>
$("#id_add_select").change(function(){

if( $(this).val() == "2"))
    handler(1)
 else 
    handler(2) 

}); 


function handler(situation){

switch (situation){
case 1:
      display: (".name");
      display: (".address");
      break;
case 2:
      disable: (".age");
      disable: (".email");
       break;  
}
}
</script>
于 2012-10-15T10:56:45.967 に答える
0
    <html>
    <head>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>


    <script>
    $(document).ready(function(){
    $("p").click(function(){
    $(this).hide();
    });

    $("#id_add_select").change(function(){

        if($(this).val() == "2")
            handler(1)
         else 
            handler(2) 
    });  
    });
     function handler(situation)
    {
    switch (situation){
    case 1:
     alert(situation);
      break;
    case 2:
      alert(situation);
       break;  
    }
    }
</script>
</head>

<body>
<p>If you click on me, I will disappear.</p>
<select name="add_select" id="id_add_select">
        <option value="1">working</option>
        <option value="2">not working</option>
        <option value="3">retired</option>
</select>
</body>

</html>
于 2012-10-15T12:18:33.160 に答える