2017-08-26 3 views
0

J'ai plusieurs lignes de code qui remplissent des fonctions similaires (elles prennent les valeurs des entrées et ajoutent une ligne de code). Y a-t-il un moyen de simplifier ces choses?jQuery - Comment simplifier le code qui effectue des fonctions similaires, mais légèrement différentes?

//======Name 
     var name = $('input[name=Name]').val(); 
     if (name){ 
     $('.results').append('<div class="item">' + '<p>Your name is ' + name + '.</p>' + '</div>');} 
//======Age 
     var age = $('input[name=YourAge]:checked').val(); 
     if (age){ 
     $('.results').append('<div class="item">' + '<p>Your age is ' + age + '.</p>' + '</div>');} 
//======Occupation 
     var occupation = $('input[name=Occupation]').val(); 
     if(occupation){ 
     $('.results').append('<div class="item">' + '<p>Your occupation is ' + occupation + '.</p>' + '</div>');} 

Répondre

2

Regardez ce qui est la même dans chaque pièce, et ce qui est différent. Tourner les pièces similaires dans le corps d'une fonction, et de faire les différentes parties les paramètres de la fonction:

function appendResult(selector, label) { 
    var result = $(selector).val(); 
    if (result){ 
     $('.results').append('<div class="item">' + '<p>Your ' label ' is ' + result + '.</p>' + '</div>'); 
    } 
} 

Ensuite, l'utiliser comme:

appendResult('input[name=Name]', 'name'); 

appendResult('input[name=YourAge]:checked', 'age'); 

appendResult('input[name=Occupation]', 'occupation'); 

Remarquez comment seulement chaque morceau de code est différent par le sélecteur utilisé, et le "label" imprimé pour décrire l'article. Ces deux pièces deviennent les paramètres, et après avoir renommé certaines variables, vous aurez une fonction généralisée que vous pourrez utiliser.

+0

Meilleure solution jusqu'à présent. + 1. mais ne pouvez-vous pas envoyer un tableau en tant que paramètre, de sorte que dans un seul appel, il fera tout au lieu de trois appel de fonction? –

+0

@AlivetoDie Vous pourriez. Vous pouvez également mapper cette fonction sur une liste de tuples de '(selector, label)'. L'idée ici était de montrer comment vous pouvez extraire un motif. Exactement comment vous voulez le faire et l'utiliser dépendra du scénario. – Carcigenicate

1

Vous pouvez simplement créer une fonction. J'ai ajouté .toLowerCase afin qu'il soit logique Vous devrez, bien sûr, appeler la fonction et passer le champ en argument.

checkExists($('input[name=Name]'));