2011-12-08 19 views
1

入力データのうち、入力データの中に含まれる割合を表示する必要があります。 入力フィールドの動的数の割合を計算する

だからユーザ入力3、2、1場合、「パーセント」入力フィールドが表示されるはずです「50、30および20」

事があり、私はフォームが取得されますどのように多くの入力を知りません。 1から任意の数にすることができます。

ソースhtmlコードは、私が作成した部分的なビューによって作成されます。出力は次のとおりです。表中の

<table> 
    <tr> 
     <th>Name</th><th>Distributiob key</th><th>Percent</th> 
    </tr> 

<tr> 
    <td> 
     House 1 
    </td> 
    <td> 
     <input type="text" size="5" value="0" id="LightPhysicalEntities_0__DistributionKey" name="LightPhysicalEntities[0].DistributionKey" /> 
    </td> 
    <td> 
     <input type="text" size="5" id="LightPhysicalEntities_0__Percent" readonly=readonly /> 
    </td> 
</tr> 
<tr> 
    <td> 
     House 2 
    </td> 
    <td> 
     <input type="text" size="5" value="0" id="LightPhysicalEntities_1__DistributionKey" name="LightPhysicalEntities[1].DistributionKey" /> 
    </td> 
    <td> 
     <input type="text" size="5" id="LightPhysicalEntities_1__Percent" readonly=readonly /> 
    </td> 
</tr> 
<tr> 
    <td> 
     House 3 
    </td> 
    <td> 
     <input type="text" size="5" value="0" id="LightPhysicalEntities_2__DistributionKey" name="LightPhysicalEntities[2].DistributionKey" /> 
    </td> 
    <td> 
     <input type="text" size="5" id="LightPhysicalEntities_2__Percent" readonly=readonly /> 
    </td> 
</tr> 

まずフィールドのタイトルや名前です。 2番目は、ユーザーが配信番号でパンチする場所です。 3番目は計算されたパーセンテージを持つ読み取り専用フィールドです。

計算はjavascriptで行う必要がありますが、入力を取得して出力を設定する方法についてはかなり難解です。このような機能は、(これはあなたが異なって処理する場合percentages- Math.floorを置き換える切り捨てます)役立つはず

+0

* ...ユーザ入力3、2、1、「パーセント」入力フィールドが表示するかどうか"50、30、20" *、何に基づいて? –

+0

@ Davidと一緒に - これらの値はどのように計算されますか? –

+0

ああ、申し訳ありませんが、私はその部分を逃した。 3 + 2 + 1 = 6.3は6の50%です.2は6の30%、1は6の20%です。 意味がありますか? – mfriis

答えて

3

function calcPcts() { 
    var distributions = $("[id$=DistributionKey]"); 

    // Get the base first 
    var base = 0; 
    distributions.each(function() { 
     base += window.parseInt($(this).val(), 10); 
    }); 

    // Now calculate the percentages of the individual ones 
    distributions.each(function() { 
     var input = $(this), 
      val = window.parseInt($(this).val(), 10), 
      pct = (val === 0) ? val : Math.floor((val/base) * 100); 
     $("#" + input.attr("id").replace("DistributionKey", "Percent")).val(pct); 
    }); 
} 
+0

それはトリックでした!ありがとうございました。私が自分自身に思いついたのはこれだった:http://pastebin.com/0UjZM97Lしかし、私はそれが動作するように時間を得るdidnt。 関数の最後の行で何をしているのか説明できますか?私はそこで何が起こっているのかかなり分かりません。 – mfriis

+0

喜んで助けてくれました:-)それは、それが働いている現在の配布キー 'input'に対するパーセント入力を選択することです。 '' LightPhysicalEntities_0__DistributionKey ''の場合は '' DistributionKey "を' 'Percent" 'に置き換えて' 'LightPhysicalEntities_0__Percent" 'に到達します。次に、これをIDで選択するために ''# "'と組み合わせて使用​​します。その要素を取得すると、それは 'val'を介して' value'属性を上記で計算したパーセンテージに設定します。 – jabclab

2

あなたが入力フィールドにクラスを追加する場合は、へのjQueryを使用することができますそのクラスのアイテムの数を取得します。その後、値を取得して計算を実行できます。ここで

は一例です。ここで

var inputCount = $(".inputfield").length; 

$("input[type='text']").change(function() { 
    var total = GetTotal(); 
    for (i = 0; i < inputCount; i++) { 
     var inputValue = $('#LightPhysicalEntities_' + i + '__DistributionKey').val(); 
     if (total != 0) { 
      var percent = inputValue/total; 
      $('#LightPhysicalEntities_' + i + '__Percent').val(percent); 
     } 
    } 
}); 

function GetTotal() { 
    var total = 0; 
    for (i = 0; i < inputCount; i++) { 
     var inputValue = $('#LightPhysicalEntities_' + i + '__DistributionKey').val(); 
     total += parseInt(inputValue); 
    } 
    return total; 
} 

は、スクリプトの動作の一例である:http://jsfiddle.net/ZWuQr/

関連する問題