2016-03-29 14 views
1

私のコードでは少し問題がありますが、それは動作していますが、私はそれが欲しい方法ではありません。小数点の有無にかかわらず固定価格

$('.prices').on('change', function() { 
 
    var elm = $(this).val(); 
 
    var value = (elm) ? elm.replace(/\D/, '') : '0'; 
 
    $(this).val(($('#amountDeposit').val() == 2) ? parseFloat(value).toFixed(2) : value); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 
 
<div class="row"> 
 
    <div class="col-md-4"> 
 
    <select id="amountDeposit" name="amountDeposit" class="form-control"> 
 
     <option value="1">Percentage</option> 
 
     <option value="2">Fixed Amount</option> 
 
    </select> 
 
    </div> 
 
    <div class="col-md-4"> 
 
    <input type="text" name="valueDeposit" class="form-control prices" value="0"> 
 
    </div> 
 
</div>

2選択ボックス、パーセントおよび一定量の値。固定金額の場合、値には小数点以下2桁が必要です。

固定金額を選択して20を入力すると、JQueryによって20.00に変更されますが、20.00を入力するとJQueryによって2000.00に変更されます。置換の考え方は、ユーザーが£や%。

私はelmにparseFloatを置こうとしましたが、シンボルが値に入っているとエラーになります。

+0

https://jsfiddle.net/25xfht1y/4/ –

答えて

4

正規表現/\d+(.\d+)?/を使用して、ユーザー入力から10進数を抽出することができます。 10進数以外の数字は安全に削除されます。その後、一致するとparseFloatを使用できます。あなたは浮動小数点を許可したくないので$(#amountDeposit)Percentageに設定されている場合

ので、以下これを使用することを行うために、この

$('.prices').on('change', function() { 
 
    var elm = /\d+(.\d+)?/.exec($(this).val()); 
 
    var value = elm ? elm[0] : '0'; 
 
    $(this).val(parseFloat(value).toFixed(2)); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 
 
<div class="row"> 
 
    <div class="col-md-4"> 
 
    <select id="amountDeposit" name="amountDeposit" class="form-control"> 
 
     <option value="1">Percentage</option> 
 
     <option value="2">Fixed Amount</option> 
 
    </select> 
 
    </div> 
 
    <div class="col-md-4"> 
 
    <input type="text" name="valueDeposit" class="form-control prices" value="0"> 
 
    </div> 
 
</div>

EDIT

をお試しくださいスニペット。

$(this).val(parseFloat(value).toFixed($('#amountDeposit').val() == 2 ? 2 : 0)); 
+1

ありがとうございました!これは完全に動作します。私は$( '#amountDeposit')の$(this)を追加しました。val()== 2)?parseFloat(value).toFixed(2):value);パーセンテージは小数点を使用しないためです。 – Sickaaron

+0

@Sickaaronはこの制限を追加するために編集しました:) –

+0

ありがとう!完璧に動作します! – Sickaaron

関連する問題