0

長い質問で申し訳ありません。次のコードのようなものがあります。

$("#el1, #el2, #el3, #el4, #el5").on("spinstop", function (event, ui) { 
    updtpg() 
});

#el1など#el2はすべてjQuery UI スピナーです。ただし、ページには他のボタン、ドロップダウン、およびチェックボックスの中に 5 つ以上 (約 20 個ありますが、一部は非表示になっている場合があります) があります。関数updtpgは、スピナーから値を取得し、いくつかの計算を行い、結果の div を更新します。

次のように、各スピナーの jQuery オブジェクトをグローバル オブジェクトに格納しています。

var window.gQ = {};
gQ.$el1 = $("#el1");
gQ.$el2 = $("#el2");

...そしてこれらをupdtpg関数で使用して、スピナーの値を取得します。私がやりたいことは、このグローバル gQ オブジェクトのプロパティを使用して、これらのスピナーの値を保持することですただし、これは次のように各スピナーを接続することを意味します。

gQ.$el1.on("spinstop", function (event, ui) { 
    gQ.$val1 = gQ.$el1.val(); 
    updtpg(); 
});

gQ.$el2.on("spinstop", function (event, ui) { 
    gQ.$val2 = gQ.$el2.val(); 
    updtpg(); 
});

...など、すべてのスピナーについて。それが理にかなっているなら、私はそれを気にしません。そして、それが私の質問だと思います。それが「正しい」方法ですか?スピナーの 1 つが変更されるたびに各スピナーの val() 関数を読み取る必要がないため、そう思いますが、多くのコードも追加されます。起動するためのかなり反復的なコード。より良い方法があり、ないことが想像できない場合、それは何ですか?

そして、あなたが見た他の何かを自由に修正してください...ええと、改善可能です。前もって感謝します。

4

2 に答える 2

0

経験則では、コードを複製するときはいつでも、より良い方法があります。以下に例を示します。最初にメイン配列を作成し、すべてのスピナーのイベント ハンドラーを作成します。各イベントで、配列を新しい値で作成または更新し、関数を呼び出して、スピナー ID に基づいてキーと値のペアを作成します。

// Create the main array
var gQ = {};

$( "#spinner1, #spinner2, #spinner3" ).on("spinstop",function (event, ui) {
    gQ[$(this).attr("id")] = $(this).val();
    updtpg(); 
});

もう 1 つのヒントは、各スピナーでクラスを使用することです。そのため、すべての ID を指定する必要はなく、代わりに 1 つのクラスだけを指定する必要があります。

  <input id="spinner1" class="specialspinner" name="spinner" value="5.06" />
  <input id="spinner2" class="specialspinner" name="spinner" value="5.06" />
  <input id="spinner3" class="specialspinner" name="spinner" value="5.06" />

    $( ".specialspinner" ).on("spinstop",function (event, ui) {
        gQ[$(this).attr("id")] = $(this).val();
        updtpg(); 
    });
于 2013-09-03T22:49:21.977 に答える