2

本当にありがとうございました。

しかし、私が次にやりたいことは本当に複雑で、皆さんには私を助ける頭脳があると確信しています。

これはより複雑なコードですが、より良い方法で書きたいと考えています。コードを減らし、より効率的にします。

申し訳ありませんが、これは多くのコードです。

JS:

function keyTechAdoption() {
        var keyTechBox = document.getElementById('keyTechTextBox');
        var sVOption = document.getElementById("dropdown_serverVirtualisation");
        var sV_Value = 10;
        var dVOption = document.getElementById("dropdown_desktopVirtualisation");
        var dV_Value = 20;

// Server Virtualisation Value ----------------------------------------------------------------------------------------- //
        if (sVOption.options[sVOption.selectedIndex].value === "N") {sV1 = null; sV2 = 0;}
        if (sVOption.options[sVOption.selectedIndex].value === "G") {sV1 = sV_Value * 1; sV2 = sV_Value * 1;}
        if (sVOption.options[sVOption.selectedIndex].value === "O") {sV1 = sV_Value * 0.3; sV2 = sV_Value * 1;}
        if (sVOption.options[sVOption.selectedIndex].value === "A") {sV1 = sV_Value * 0.5; sV2 = sV_Value * 1}
        if (sVOption.options[sVOption.selectedIndex].value === "R") {sV1 = 0; sV2 = sV_Value * 1;}
        else if (sVOption.options[sVOption.selectedIndex].value === "U") {sV1 = 0; sV2 = sV_Value * 1;}
        // Server Virtualisation Value ----------------------------------------------------------------------------------------- //

        // Desktop Virtualisation Value ----------------------------------------------------------------------------------------- //
        if (dVOption.options[dVOption.selectedIndex].value === "N") {dV1 = null; dV2 = 0;}
        if (dVOption.options[dVOption.selectedIndex].value === "G") {dV1 = dV_Value * 1; dV2 = dV_Value * 1}
        if (dVOption.options[dVOption.selectedIndex].value === "O") {dV1 = dV_Value * 0.3; dV2 = dV_Value * 1;}
        if (dVOption.options[dVOption.selectedIndex].value === "A") {dV1 = dV_Value * 0.5;dV2 = dV_Value * 1}
        if (dVOption.options[dVOption.selectedIndex].value === "R") {dV1 = 0; dV2 = dV_Value * 1;}
        else if (dVOption.options[dVOption.selectedIndex].value === "U") {dV1 = 0; dV2 = dV_Value * 1;}
        // Desktop Virtualisation Value ----------------------------------------------------------------------------------
var keyTechTotal1 = sV1 + dV1;
        var keyTechTotal2 = sV2 + dV2;
        var keyTechPercentage = (keyTechTotal1) / (keyTechTotal2) * 100
        if (keyTechTotal1 > 0) {keyTechBox.value = keyTechPercentage.toFixed(0) + "%";}
        else {keyTechBox.value = 0 + "%";}

}

HTML:

    <input class="textBox" runat="server" type="text" id="keyTechTextBox" readonly="true" />
<select class="selectElement" runat="server" id="dropdown_serverVirtualisation" onchange="keyTechAdoption()">
                        <option value="N">N</option>
                        <option value="G">G</option>
                        <option value="O">O</option>
                        <option value="A">A</option>
                        <option value="R">R</option>
                        <option value="U">U</option>
                    </select>
<select class="selectElement" runat="server" id="dropdown_desktopVirtualisation" onchange="keyTechAdoption()">
                        <option value="N">N</option>
                        <option value="G">G</option>
                        <option value="O">O</option>
                        <option value="A">A</option>
                        <option value="R">R</option>
                        <option value="U">U</option>
                    </select>

あなたの助けと時間を割いてくれた素晴らしい人々に感謝してもしきれません :)

4

5 に答える 5

2

これが私がjqueryが好きな理由です...30行のコード= 6行.. :)

HTML5データ属性とjqueryを使用して..データ属性に値を追加するだけです..

HTML

<input type="text" id="resultBox" readonly="true" />
<select id="dropdown_test" >
 <option value="N" data-one="0" data-two="0">N</option>
 <option value="G" data-one="1" data-two="1">G</option>
 <option value="O" data-one="0.3" data-two="1">O</option>
 <option value="A" data-one="0.5" data-two="1">A</option>
 <option value="R" data-one="0" data-two="1">R</option>
 <option value="U" data-one="0" data-two="1">U</option>
</select>

jquery

$(function(){
  $('#dropdown_test').change(function(){
    var select1_control = 10;
    var str= select1_control * $(this).find('option:selected').data('one') +    select1_control * $(this).find('option:selected').data('two');
    $('#resultBox').val(str);
 });
});

ここでフィドル

更新しました

私が言ったように...両方の選択ボックスにデータ属性を追加するだけです..

html

<input class="textBox" runat="server" type="text" id="keyTechTextBox" readonly="true" />
<select class="selectElement" runat="server" id="dropdown_serverVirtualisation">
  <option value="N" data-one="0" data-two="0">N</option>
  <option value="G" data-one="1" data-two="1">G</option>
  <option value="O" data-one="0.3" data-two="1">O</option>
  <option value="A" data-one="0.5" data-two="1">A</option>
  <option value="R" data-one="0" data-two="1">R</option>
  <option value="U" data-one="0" data-two="1">U</option>
</select>
<select class="selectElement" runat="server" id="dropdown_desktopVirtualisation">
  <option value="N" data-one="0" data-two="0">N</option>
  <option value="G" data-one="1" data-two="1">G</option>
  <option value="O" data-one="0.3" data-two="1">O</option>
  <option value="A" data-one="0.5" data-two="1">A</option>
  <option value="R" data-one="0" data-two="1">R</option>
  <option value="U" data-one="0" data-two="1">U</option>
</select>

jquery

$(function(){
$('.selectElement').change(function () {
   var sV_Value = 10;
   var dV_Value = 20;

   var sV1 = sV_Value * $('#dropdown_serverVirtualisation').find('option:selected').data('one')
   var sV2 = sV_Value * $('#dropdown_serverVirtualisation').find('option:selected').data('two');

   var dV1 = dV_Value * $('#dropdown_desktopVirtualisation').find('option:selected').data('one')

   var dV2 = dV_Value * $('#dropdown_desktopVirtualisation').find('option:selected').data('two');

   var keyTechTotal1 = sV1 + dV1;
   var keyTechTotal2 = sV2 + dV2;

   var keyTechPercentage = (keyTechTotal1) / (keyTechTotal2) * 100
   if (keyTechTotal1 > 0) {
      var str = keyTechPercentage.toFixed(0) + "%";
   } else {
      var str = 0 + "%";
   }

   $('#keyTechTextBox').val(str);
});

 $('.selectElement').trigger('change'); //<---this if you need the % in page load to when N and N is selected
});

あなたの計算部分のほとんどを変更しませんでした...

更新されたフィドル

于 2013-05-15T19:11:12.987 に答える
2

カスタム属性とより一般的な JavaScript を使用して、必要なスケーラビリティを得ることができます。

HTML:

<input type="text" id="resultBox" readonly="true" />
<select id="dropdown_test" onchange="calc()">
    <option m1="" m2="0" value="N">N</option>
    <option m1="1" m2="1" value="G">G</option>
    <option m1="0.3" m2="1" value="O">O</option>
    <option m1="0.5" m2="1" value="A">A</option>
    <option m1="0" m2="1" value="R">R</option>
    <option m1="0" m2="1" value="U">U</option>
</select>

JavaScript:

function calc() {
    var resultBox = document.getElementById('resultBox');
    var select1 = document.getElementById("dropdown_test");
    var select1_control = 10;
    var selected_option = select1.options[select1.selectedIndex];
    var m1 = selected_option.getAttribute("m1");        
    if (m1 == ""){
        var1 = null
    } else {
        var1 = select1_control * parseFloat(m1);
    }

    var m2 = selected_option.getAttribute("m2");
    if (m2 == ""){
        var2 = null
    } else {
        var2 = select1_control * parseFloat(m2);
    }

    resultBox.value = (var1 + var2);
}
于 2013-05-15T18:57:36.263 に答える
1

HTML :

<select id="dropdown_test" onchange="calc()">
    <option value="N" data-var1="null" data-var2="0">N</option>
    <option value="G" data-var1="1" data-var2="1">G</option>
    <option value="O" data-var1="0.3" data-var2="1">O</option>
    <option value="A" data-var1="0.5" data-var2="1">A</option>
    <option value="R" data-var1="0" data-var2="1">R</option>
    <option value="U" data-var1="0" data-var2="1">U</option>
</select>

Javascript :

function calc() {
    var resultBox = document.getElementById('resultBox');
    var select1 = document.getElementById("dropdown_test");
    var item = select1.options[select1.selectedIndex];
    var select1_control = 10;

    var var1 = item.getAttribute('data-var1');
    var var2 = item.getAttribute('data-var2');

    resultBox.value = parseFloat(var1) + (parseFloat(var2) * select1_control);
}

デモ

于 2013-05-15T18:56:40.823 に答える
1

HTML を変更できる場合は、いくつかのデータ属性を追加して、これをより簡単にします。例えば:

<input type="text" id="resultBox" readonly="true" />
<select id="dropdown_test" onchange="calc()">
    <option data-val1="0" data-val2="0" value="N">N</option>
    <option data-val1="1" data-val2="1" value="G">G</option>
    <option data-val1="0.3" data-val2="1" value="O">O</option>
    <option data-val1="0.5" data-val2="1" value="A">A</option>
    <option data-val1="0" data-val2="1" value="R">R</option>
    <option data-val1="0" data-val2="1" value="U">U</option>
</select>

次に、選択したオプションの値を使用して合計を計算できます。

function calc() {
    var select1_control = 10;
    var val1 = parseFloat(jQuery('#dropdown_test').find(':selected').data('val1'), 10);
    var val2 = parseFloat(jQuery('#dropdown_test').find(':selected').data('val2'), 10);
    jQuery('#resultBox').val((val1 * select1_control) + (val2 * select1_control));
}

フィドル: http://jsfiddle.net/duffmaster33/z4Pfg/

于 2013-05-15T18:59:07.213 に答える
1

HTML を変更せずに、JavaScript を次のようにリファクタリングできます。

function calc() {

     var SELECT1_CONTROL = 10;
     var matrix = {
         "N": [null, 0],
         "G": [1, 1],
         "O": [0.3, 1],
         "A": [0.5, 1],
         "R": [0, 1],
         "U": [0, 1]
     }

     var selectedValue = document.getElementById("dropdown_test").value;
     var var1 = SELECT1_CONTROL * matrix[selectedValue][0];
     var var2 = SELECT1_CONTROL * matrix[selectedValue][1];

     var resultBox = document.getElementById('resultBox');
     resultBox.value = (var1 + var2);
 }

または、リカルドが提案するように、データ注釈ルートを検討する

于 2013-05-15T19:03:23.537 に答える