2011-10-17 9 views
3

これは愚かであるが、私はどこでも検索したが、私はそれについてどうやって行くのかについてのヒントは見つけられなかった。 iはJquery条件文

var id = $('#sometextfield').val(); 

このテキストフィールドの値が動的に生成された例えば、この変数を持っています。

<input type="text" name="id" id="id" value="<?php echo $_get[something];?>" />) 

ここでの問題は、私は

if(id == 100 || id ==120) { 
    // i have these variables 
    var mulitiplier = 0.005 
    var price = (some alog) * mulitiplier; 

    // do some very long piece of code 
} 
else if (id == 200 || id == 220) { 
    // Then i have these variables 
    var mulitiplier = 0.090; 
    var price = (some alog) * mulitiplier; 
    // Do the same very long piece of code(its practically the same thing as 
    // the first if statement and the only change is the ariable multiplier)   
} 

これは動作し、すべてが、同じことを繰り返さないためにどのような方法があると言っている場合の条件を持っているということです。私はそれの外観が気に入らない。 事前に感謝します。

+0

コードからテキストを切り離すことができれば、コード内でコメントを作ることができればすばらしいことでしょう。 –

+0

本当に申し訳ありませんが、私はそれがうまく説明できたと思っています。私は間違っていたと思います。 –

+0

コメントはありますが、このミックスは読みにくいです...少なくとも私にとっては;) –

答えて

3
function long_piece(multiplier){ 
    ... long piece of code.... 
} 
var MultMap = {100:0.005, 120:0.005, 200:0.009, 220:0.009} 

long_piece(MultMap[id]) 
+0

これは魅力のように働いた..ありがとう非常にありがとう –

1

簡単に、カスタム関数に「非常に長いコード」を入れて、1つのパラメータ、つまり乗数を受け入れます。

3

ちょうど抽象パラメータとしてmultiplierpriceの値を取る関数へのコードの非常に長い作品。例えば

var theCode = function (multiplier, price) { 
    do some very long piece of code 
}; 

if(id == 100 || id == 120) { 
    var mulitiplier = 0.005 
    var price = (some alog) * mulitiplier; 
    theCode(multiplier, price); 
} else if (id == 200 || id == 220) { 
    var mulitiplier = 0.090; 
    var price = (some alog) * mulitiplier; 
    theCode(multpilier, price); 
} 

注:あなたはこの種のコードの値の代わりに、==を比較するためのid===の初期化にparseIntを使用して検討すべきです。

+0

===に切り替えると、おそらく_100_を_ "100" _同様に。 –

+0

@ElliotNelson以上の場合は、 'parseInt'で' id'を作成して比較します – JaredPar

0

関数のコードの長い部分をラッピングして、このようにコードを書き換えることは、より効率的な(そして、より読みやすい)になり、私は考えます:

var id100120 = id === 100 || id === 120, 
    id200220 = id === 200 || id === 220, 
    multiplier = id100120 ? 0.005 : id200220 ? 0.090 : null, 
    price = (/*some alog*/) * mulitiplier, 
    longPieceOfCode = function(){ /* your code here ... */ }; 

if (id100120 || id200220) { 
    longPieceOfCode(); 
} 

idは、文字列値であれば、あなたも使用することができます以下のようなもの:

var id100120 = '[100][120]'.indexOf('['+id+']')>-1, 
    id200220 = '[200][220]'.indexOf('['+id+']')>-1 

か(すなわち< 9を除いて、私は思う)

id = Number(id); 
var id100120 = [100,120].indexOf(id) > -1, 
    id200220 = [200,220].indexOf(id) > -1