2011-10-17 5 views
3

Je suis vraiment désolé si cela vous semble stupide mais j'ai cherché partout mais je n'ai trouvé aucun conseil sur la façon de s'y prendre. i ont cette variableDéclaration conditionnelle Jquery

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

Cette valeur du champ de texte est généré dynamiquement par exemple.

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

Le problème est ici que j'ai une condition if dire

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)   
} 

Cela fonctionne et tout, mais est-il possible de ne pas répéter la même chose. Je n'aime pas le look de ça atm. Un grand merci d'avance ..

+0

Ce serait bien si vous pouviez séparer le texte du code ... ou du moins faire des commentaires dans le code. –

+0

Vraiment désolé, je pensais que je pourrais bien l'expliquer de cette façon, suppose que je me trompais :) –

+0

C'est bien avec les commentaires, mais ce mélange est juste difficile à lire ... au moins pour moi;) –

Répondre

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

Cela a fonctionné comme un charme .. Merci beaucoup –

1

Facile, il suffit de mettre le "très long morceau de code" dans une fonction personnalisée, en acceptant 1 paramètre, c'est votre multiplicateur.

3

Juste abstrait la pièce longue de code à une fonction qui prend les valeurs multiplier et price en tant que paramètres. Par exemple

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); 
} 

Remarque: Vous devriez envisager d'utiliser parseInt dans l'initialisation de id et === pour comparer les valeurs au lieu de == pour ce type de code.

+0

Notez que si vous passez à ===, vous devrez probablement changer _100_ à _ "100" _ aussi. –

+0

@ElliotNelson ou mieux encore créer 'id' avec' parseInt' donc la comparaison est entre les nombres – JaredPar

0

emballage long morceau de code dans une fonction et réécriture du code comme celui-ci serait plus efficace (et plus lisible), je suppose:

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(); 
} 

si id est une valeur de chaîne, vous pouvez également utiliser quelque chose comme:

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

ou (à l'exception de 9 <-à-dire que je pense)

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