#php #jquery #html
#php #jquery #HTML
Вопрос:
Blockquote
У меня есть форма, в которой есть три поля, два текстовых поля и одно поле выбора. Если я ввожу цену в одно текстовое поле и выбираю одно значение скидки из выпадающего списка, цена продажи должна автоматически отображаться в текстовом поле. Расчет цены находится в функции изменения jquery. Предположим, если цена продажи имеет некоторое десятичное значение, при нажатии tab в поле выбора десятичная точка заменяется на 0 в поле цены продажи. Я не знаю, почему это происходит. Кто-нибудь может мне помочь?
Blockquote
<div class="form-group">
<label class="col-sm-3 control-label">Price<span style="color:red">*</span></label>
<div class="col-sm-6">
<input type="text" class="form-control" id="price" name="price" onkeyup="this.value=this.value.replace(/[^0-9]/,'');" maxlength="10"/>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">Discount</label>
<div class="col-sm-6">
<select name="discount" class="form-control" id="discount">
<option value="0">-- Select Discount Range --</option>
<?php
$i=5;
while($i<=75){
?>
<option value="<?php echo $i; ?>"><?php echo $i."%"; ?></option>
<?php $i=$i 5; } ?>
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">Sale Price</label>
<div class="col-sm-6">
<input type="text" class="form-control" id="sale" name="sale_price" onkeyup="this.value=this.value.replace(/[^0-9]/,'');" maxlength="10" readonly>
</div>
</div>
И мой jquery
$('#discount').change(function(){
var price = $('#price').val();
var disc = $(this).val();
var sale = (parseInt(price)-(parseInt(price) * (parseInt(disc) / 100) ));
$('#sale').val(sale);
});
Комментарии:
1. можете ли вы показать нам свой код, пожалуйста? Вы можете использовать JsFiddle для di
2. Я отредактировал свой пост с помощью своего кода
Ответ №1:
Вам нужно использовать функцию parseFloat() вместо parseInt(). Int — это целое число, которое не может иметь десятичное значение.
2.53 (Float value)
5 (Int value)
-8 (Int value)
-5.98 (Float value)
Когда вы это сделали
var sale = (parseInt(price)-(parseInt(price) * (parseInt(disc) / 100) ));
пример: цена равна 2,50
parseInt(2.5) -> Даст 0
0 — 0 * 10 / 100 = 0
Редактировать:
Я понимаю, в этой строке
this.value=this.value.replace(/[^0-9]/,'');
Вы не разрешаете.или, символ.
Комментарии:
1. Отсутствие parseFloat также дает тот же результат.
2. Хорошо, попробуйте поставить какую-нибудь консоль. регистрируйтесь во время события .change. Выведите все значения в каждой строке и отправьте мне обратный вызов
3. На самом деле я правильно определяю цену продажи. Если цена продажи имеет десятичную точку, и я нажимаю tan в поле выбора скидки, десятичная точка заменяется на ноль