1

長さを数え、それが適切な量であることを確認する入力フィールドの小さなチェックを書きました。9 桁または 1 文字と 5 桁のいずれかを許可する必要があるため、複雑になります。私が今持っている方法は機能しますが、コードは私の脳を傷つけます.おそらく三項および/またはスイッチを使用して、これに対してよりエレガントなソリューションがどのように見えるかを知りたいですか?

だから、私が今持っているそれほどきれいではない部分のほんの一部:

if (len !== 9) {
    if (len == 1) {
        y.hide();
        n.show();
        valInput.text("You need 8 more numbers");
    } else {
        if (len == 2) {
            y.hide();
            n.show();
            valInput.text("You need 7 more numbers");
        } else {
            if (len == 3) {
                y.hide();
                n.show();
                valInput.text("You need 6 more numbers");
            } else {
                if (len == 4) {
                    y.hide();
                    n.show();
                    valInput.text("You need 5 more numbers");
                } else {
                    if (len == 5) {
                        y.hide();
                        n.show();
                        valInput.text("You need 4 more numbers");
                    } else {
                        if (len == 6) {
                            y.hide();
                            n.show();
                            valInput.text("You need 3 more numbers");
                        } else {
                            if (len == 7) {
                                y.hide();
                                n.show();
                                valInput.text("You need 2 more numbers");
                            } else {
                                if (len == 8) {
                                    y.hide();
                                    n.show();
                                    valInput.text("You need 1 more number");
                                } else {
                                    if (len > 9) {
                                        y.hide();
                                        n.show();
                                        valInput.text("Order number must be 9 digits");
                                        // gt 9
                                    }
                                    // 8
                                }
                                // 7
                            }
                            // 6
                        }
                        // 5
                    }
                    // 4
                }
                // 3
            }
            // 2
        }
        // 1
    }
    // this is not equal to 9
}

アップデート

すべての答えをありがとう!良いものがたくさんあります。しばらくプレイした後、お気に入りを受け入れます。適切な要件が満たされたときに何が起こるかを明確にするために、送信ボタンはフェードインしますが、検証されるまではフェードインしません。関連するかどうかはわかりませんが、関数が「ライブタイプ」としても実行されるため、カウントを含むメッセージが各後に返されることに言及します.keyup()

4

7 に答える 7

4

残りの文字は javascript で計算する必要があると思います。それが他のすべての if else ブランチの唯一の違いであるため、次のようなことができ、はるかに読みやすくなります。

if (len !== 9) {
    y.hide();
    n.show();
    if (len > 9) {
        valInput.text("Order number must be 9 digits");
    }
    else{
        var remaining = 9 - len;
        valInput.text("You need " + remaining + " more numbers");
    }
}
于 2013-09-16T17:53:30.037 に答える
3

あなたの特定のケースでは、検証は次のようなものに対して十分に単純であるように見えます:

function validate(len) {
    var msg;
    if (len == 9)
        return true;
    y.hide(); /* no need to duplicate these calls in each condition */
    n.show();
    if (len < 9)
        msg = 'You need ' + (9-len) + ' more number' + (len == 1 ? '' : 's') + '.';
    else
        msg = 'You entered ' + (len-9) + ' number' + (len == 1 ? '' : 's') + ' too many.;
    valInput.text(msg);
    return false;

}

コメント: ===派手にするためだけでなく、必要なときに備えて保存する必要があります。残念ながら、非常に多くの人が、型変換などの便利で役立つ追加機能を実際に理解するのではなく、二重等号を避けるように教えられています。この状況では、トリプルイコールを使用する理由はまったくありません。

しかし、一般的には、一連の条件文が、連続した整数だけ変化する一連のメッセージを警告するよりも重要なことを行う場合など、次のように使用しswitchます ...

switch (len) {
case 1:

/* handle this case */;
    y.hide();
    n.show();
    valInput.text("You need 8 more numbers");
    break;
/* make sure to end case 1 with a break; */

case 2:
    y.hide();
    n.show();
    valInput.text("You need 7 more numbers");
    break;
/* make sure to end every case with a break; */

...
}
于 2013-09-16T17:48:36.643 に答える
0

最短の代替:

(y.hide(), n.show(), valInput.text(
     len < 9 &&  "You need " + (9-len) + " more digits"
  || len > 9 && "too many ("+ (len-9) + ") digits" 
  || "ok!"
));
于 2013-09-16T18:35:47.687 に答える