2017-12-27 13 views
0

数値からパーセントを減算してjQueryを使用して入力に表示しようとしていますが、PHP/MySQLを使用してフォームが値を取得しています。PHP/MySQLの値を使用したjQuery数

私は値がデータベースに戻って別のテーブルに掲載されるユニークなIDであるので、これは私が持っているものである選択フィールドに余分な属性を使用していないよ:

<input type="text" id="invamount" name="invamount" value="250.00"/> 
<select id="invdiscount"> 
    <option data-discount="0" value="" selected>No Discount</option> 
    <option data-discount="5" value="1">Discount 1 - 5%</option> 
    <option data-discount="10" value="2">Discount 2 - 10%</option> 
    <option data-discount="15" value="3">Discount 3 - 15%</option> 
</select> 
<input type="text" id="invtotal" name="invtotal" /> 

<script> 
jQuery(document).ready(function() { 
    jQuery("#invtotal").on("click", function() { 
     sum(); 
    }); 
}); 

function sum() { 
      var amount = document.getElementById('invamount').value; 
      var discount = jQuery("#invdiscount option").attr("data-discount"); 
      var maths1 = (discount * amount/100); 
      document.getElementById('invtotal').value = maths1; 
     } 
</script> 

何がありますコンソールにエラーフォームをロードするが、私は別の割引を選択するたびに、総入力の値は、単に問題は、あなたが入力にそれぞれクリックsum()を行っているということである0

+2

オプションタグに余分な属性を入れさせることはできませんか? (例えば、data-discount = "")、その値をjQueryで読み取るよりも? – Lexib0y

+0

良いアイデア、それを試してみましょう。 – Adrian

+1

いつでも追加の属性を作成することができます。html5からカスタム属性でデータの名前を指定するという命名規則が正式にサポートされています。 – Lexib0y

答えて

1

割引の属性が正しく取得されていないという問題があります。 あなたは次の行を実行した後に値引き変数の値を調べる場合:

var discount = jQuery("#invdiscount option").attr("data-discount"); 

jQuery("#invdiscount option") 1を選択し、選択ボックスからすべてのオプションをいない選択されているため、それは常に、「0」を返します。選択されたオプションから割引属性を取得するには

、あなたが(:オプションを選択します)jQuery("#invdiscount option:selected").attr("data-discount")を使用することができます。このオプションを選択した後に更新された入力を取得したい場合

また、あなたは要素を選択変更イベントをリッスンする必要があります。

作業コードは次のようになります。

<input type="text" id="invamount" name="invamount" value="250.00"/> 
<select id="invdiscount"> 
    <option data-discount="0" value="" selected>No Discount</option> 
    <option data-discount="5" value="1">Discount 1 - 5%</option> 
    <option data-discount="10" value="2">Discount 2 - 10%</option> 
    <option data-discount="15" value="3">Discount 3 - 15%</option> 
</select> 
<input type="text" id="invtotal" name="invtotal" /> 

<script> 
jQuery(document).ready(function() { 
    jQuery("#invdiscount").on("change", function() { 
     sum(); 
    }); 
}); 

function sum() { 
      var amount = document.getElementById('invamount').value; 
      var discount = jQuery("#invdiscount option:selected").attr("data-discount"); 
      var maths1 = (discount * amount/100); 
      document.getElementById('invtotal').value = maths1; 
     } 
</script> 

最後に、あなたが取得し、代わりにプレーンなJavaScriptを使用して値を割り当てるためにjQueryのメソッドを使用することができます。コードは次のようになります:

<input type="text" id="invamount" name="invamount" value="250.00"/> 
<select id="invdiscount"> 
    <option data-discount="0" value="" selected>No Discount</option> 
    <option data-discount="5" value="1">Discount 1 - 5%</option> 
    <option data-discount="10" value="2">Discount 2 - 10%</option> 
    <option data-discount="15" value="3">Discount 3 - 15%</option> 
</select> 
<input type="text" id="invtotal" name="invtotal" /> 

<script> 
jQuery(document).ready(function() { 
    jQuery("#invdiscount").on("change", function() { 
     sum(); 
    }); 
}); 

function sum() { 
    var amount = $("#invamount").val(); 
    var discount = jQuery("#invdiscount option:selected").attr("data-discount"); 
    var maths1 = (discount * amount/100); 
    jQuery("#invtotal").val(maths1); 
} 
</script> 
+0

ありがとう、私は追加:var discountに選択し、リスナーをonに変更しました。 .toFixed(2)を小数点以下2桁の入力に表示する値の最後に追加しました。魅力を感じます。ありがとうございます。 – Adrian

+0

また、セレクタを '$( 'invdiscount、#invamount')'に拡張すると、金額や割引が変わるたびに計算がトリガされます。 – cars10m

1

にとどまります。
そしての変更をに変更するたびにsum()を実行する必要があります。

jQuery(document).ready(function() { 
    jQuery("#invdiscount").on("change", function() { 
     sum(); 
    }); 
}); 
関連する問題