2017-11-20 2 views
0

前に私は美しいjsコードin this linkについて尋ねる質問がありますが、インデックス番号の代わりにという単語を使用しているので、今度はこのコードを美しくする方法がわかりません。(ボルトで固定言葉が、それは私の前の質問と同じではありません理由です)このJavaScriptコードを美化/リファクタリングする方法は?

オリジナルJSコード

//food 
$("#food_east").keyup(function() 
{ 
    samefunction(); 
}); 

$("#food_west").keyup(function() 
{ 
    samefunction(); 
}); 

$("#food_north").keyup(function() 
{ 
    samefunction(); 
}); 

$("#food_south").keyup(function() 
{ 
    samefunction(); 
}); 

//beverage 
$("#beverage_east").keyup(function() 
{ 
    samefunction(); 
}); 

$("#beverage_west").keyup(function() 
{ 
    samefunction(); 
}); 

$("#beverage_north").keyup(function() 
{ 
    samefunction(); 
}); 

$("#beverage_south").keyup(function() 
{ 
    samefunction(); 
}); 

そして、これが唯一の食品や飲料である、私はそのようなキャンディー、スナックなどなどが含まれていませんそれはあまりにも面倒なので、私のコードをすべてここにダンプするからです。私はこの解決策を思いつくことができます、より良い解決策はありますか?

var compass = ["east", "west", "north", "south"]; 

    for(var i=0; i<3; i++) 
    { 
     var name = "#food_"; 
     name += compass[i]; 

     $(name).keyup(function() { 
      samefunction(); 
     }); 

     var name = "#beverage_"; 
     name += lokasi[i]; 

     $(name).keyup(function() { 
      samefunction(); 
     }); 
    } 
+3

あなたは、問題のすべての要素にクラスを使用することができませんでしたか?次に、そのクラスを使用して選択し、イベントハンドラを割り当てるだけで済みます。 – Sirko

+0

'keyup'に関数名(リファレンス)を渡すべきです。 'keyup(samefunction)' – evolutionxbox

+2

_「美化する」_ JavaScriptは、あなたが何を意味するのかを意味するものではありません。これは、書式設定(空白、インデント、改行など)を指します。あなたのケースは_ "リファクタリング" _と呼ばれる可能性があります。 – yuriy636

答えて

1

ではなく、要素ごとに1つのユニークな識別子で、クラスを使用します。クラスはグループ名に似ています。そのクラスのすべての要素を一度に選択できます。

$(".someClass").keyup(function() { 
 
    console.log("Keyup event!") 
 
    // Do stuff 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input class="someClass" type="text" /> 
 
<input class="someClass" type="text" /> 
 
<input class="someClass" type="text" /> 
 
<input class="someClass" type="text" /> 
 
<input class="someClass" type="text" /> 
 
<input class="someClass" type="text" />

1

これは、発明されたクラスが同じクラスのすべての要素を与え、そのクラスに関数をバインドする理由です。

もう一つの方法は、セレクタを使用することができ「で始まる」:$(‘[id^=“food_”]’).keyup...

+1

これはコメントであり、答えではありません。 –

+0

@patrickこれは、自動的にfood_west、food_east、food_north、およびfood_southを識別することを意味しますか? – learnprogramming

+1

はい、またfood_blablablaなので、 'food_'で始まるものはすべて – patrick

関連する問題