Поля математической формы Javascript - PullRequest
0 голосов
/ 26 апреля 2018

Я строю форму с некоторыми математическими функциями javascript и не могу заставить 3-е поле работать так, как я хочу

  • Когда вы вводите 100 в поле синей цены 'Сколько вы хотели бы получить за продажу этой бутылки'
  • Затем 25 вводится в следующее поле, которое является правильным.
  • но поле ПРОДАВАТЬ ЦЕНУ, ВКЛЮЧАЯ НАЛОГ, не работает. Нужно 100, затем добавить следующее поле, так что в этом случае 125, а затем умножьте его на 1,125. Чтобы дать ответ $ 140,63

https://www.cloudwine.com.au/list-private-wine


ОБЛАСТЬ ФОРМЫ

<label for="CAT_Custom_15"><b>How much would you like to be paid for selling this bottle?</b></label>
<input type="text" maxlength="4000" onchange="output()" name="CAT_Custom_15" id="CAT_Custom_15" class="cat_textbox price bborder" />

<label for="CAT_Custom_14">Cloudwine Commission 25%</label>
<input type="text" maxlength="4000" name="CAT_Custom_14" id="CAT_Custom_14" class="cat_textbox price" readonly="readonly" />

<label for="CAT_Custom_13">SELL PRICE INCLUDING TAX</label>
<input type="text" maxlength="4000" name="CAT_Custom_13" id="CAT_Custom_13" class="cat_textbox price" readonly="readonly" />

JAVASCRIPT

function output(){

    var startPriceV2 = jQuery( "#CAT_Custom_15" ).val();

    jQuery( '#CAT_Custom_14' ).val( parseInt(startPriceV2) * (0.25) ).toFixed(2);

    var cloudCom = jQuery( '#CAT_Custom_14' ).val();            

    jQuery( '#CAT_Custom_13' ).val( parseInt(startPriceV2) + parseInt(cloudCom) * (1.125) ).toFixed(2);

}

Ответы [ 3 ]

0 голосов
/ 26 апреля 2018

Ваш toFixed() находится на элементе jQuery, а не на числовом значении.

Кроме того, toFixed() возвращает строку, я использовал оператор + для преобразования ее в число.

Я сохранил вычисления в переменных вместо того, чтобы снова извлекать их с вашей страницы.Это повышает производительность за счет сокращения вызовов jQuery.

Измените JS на следующее:

function output(){
                 
  var startPriceV2 = +jQuery( "#CAT_Custom_15" ).val();
  var tax = +(startPriceV2 * (0.25)).toFixed(2);
  var cloudCom = +((startPriceV2 + tax) * 1.125).toFixed(2);      

  jQuery( '#CAT_Custom_14' ).val( tax );  
  jQuery( '#CAT_Custom_13' ).val( cloudCom );

}
label {
  display:block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<label for="CAT_Custom_15"><b>How much would you like to be paid for selling this bottle?</b></label>
<input type="text" maxlength="4000" onchange="output()" name="CAT_Custom_15" id="CAT_Custom_15" class="cat_textbox price bborder" />

<label for="CAT_Custom_14">Cloudwine Commission 25%</label>
<input type="text" maxlength="4000" name="CAT_Custom_14" id="CAT_Custom_14" class="cat_textbox price" readonly="readonly" />

<label for="CAT_Custom_13">SELL PRICE INCLUDING TAX</label>
<input type="text" maxlength="4000" name="CAT_Custom_13" id="CAT_Custom_13" class="cat_textbox price" readonly="readonly" />

Вы также можете сделать это без jQuery, который предпочитают многие разработчики.

function output(){   

  var priceInput = document.getElementById('CAT_Custom_15');
  var commisionInput = document.getElementById('CAT_Custom_14');
  var totalInput = document.getElementById('CAT_Custom_13');
                 
  var startPriceV2 = +priceInput.value;
  var commision = +(startPriceV2 * (0.25)).toFixed(2);
  var cloudCom = +((startPriceV2 + commision) * 1.125).toFixed(2);   
  
  commisionInput.value = commision;
  totalInput.value = cloudCom;

}
label {
  display:block;
}
<label for="CAT_Custom_15"><b>How much would you like to be paid for selling this bottle?</b></label>
<input type="text" maxlength="4000" onchange="output()" name="CAT_Custom_15" id="CAT_Custom_15" class="cat_textbox price bborder" />

<label for="CAT_Custom_14">Cloudwine Commission 25%</label>
<input type="text" maxlength="4000" name="CAT_Custom_14" id="CAT_Custom_14" class="cat_textbox price" readonly="readonly" />

<label for="CAT_Custom_13">SELL PRICE INCLUDING TAX</label>
<input type="text" maxlength="4000" name="CAT_Custom_13" id="CAT_Custom_13" class="cat_textbox price" readonly="readonly" />
0 голосов
/ 26 апреля 2018

Округление чисел является для вас пока второстепенным (и бессмысленным).В вашем случае используется правильная архитектура и хорошие практики, например, не использовать поля ввода для вычисляемого поля и не прикреплять обработчики событий из вашего HTML-кода: использование jQuery также было бы вполне уместно для подключения обработчиков.

У меня естьТакже выяснилось, что обработчик события «onchange» не дает ожидаемого результата, поэтому я изменил его на «onblur».Я не могу объяснить, почему, но я не буду углубляться в это, поскольку присоединение обработчиков из html определенно не рекомендуется.

Что касается шаблона разработки и отработки, попробуйте этот «бесшумный» фрагмент:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<!DOCTYPE html>
<html>
<head>
    <title>TODO supply a title</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
        #commission {
            width: 60px;
            height: 20px;
            border: 1px solid blue;
        }
        #finalPrice {
            width: 60px;
            height: 20px;
            color: white;
            background-color: blue;
        }
    </style>
</head>
<body>
    How Much? <input type="text" onblur="output();" id="price">
    <br>
    Cloudwine comm.: <div id="commission"></div>
    Price: <div id="finalPrice"></div>


    <script>
        function output ()
        {
            let priceValue = Number ($('#price').val()),
                resultCommission = Number (priceValue *.25),
                firstAddition = priceValue + resultCommission,
                resultFinal = firstAddition + firstAddition *.125 ;

            $('#commission').html (resultCommission);
            $('#finalPrice').html (resultFinal);
        }
    </script>
</body> 
</html>

Полагаю, вы обратились к этим полям ввода из-за форматирования.Не делайте этого, используйте CSS вместо этого (и особенно для правил 'float').

Кроме того, у меня есть приведенные значения explicity к Number: JS - очень слабый язык, вы можете получить странные результаты, если не платитевнимание.

0 голосов
/ 26 апреля 2018
function output(){

  var startPriceV2 = jQuery( "#CAT_Custom_15" ).val();

    jQuery( '#CAT_Custom_14' ).val( (parseInt(startPriceV2) * (0.25)).toFixed(2) );

    var cloudCom = jQuery( '#CAT_Custom_14' ).val();            

    jQuery( '#CAT_Custom_13' ).val( (parseInt(startPriceV2) + parseInt(cloudCom) * (1.125)).toFixed(2) );

}

Вы испортили свой .toFixed(2)

...