Изменить цифры по умолчанию в текстовом поле с помощью раскрывающегося списка - PullRequest
2 голосов
/ 14 декабря 2011

Я работаю над этой страницей - http://www.medilogicuk.com/v1/products/calculate-savings/

Это простой калькулятор, который рассчитывает экономию.В настоящее время значения по умолчанию во входах «Фармацевт» и «Диспенсер / Техник» представляют собой годовые значения, когда пользователь нажимает на раскрывающийся список и выбирает «в час», я хочу, чтобы цифры автоматически менялись в час (черезпростой расчет) ... и наоборот.Входные данные должны (пере) вычислять любое число, которое вводит пользователь, поэтому, если они вводят 50,00 и переходят в год, то цифра в годовом выражении должна отражать это.

Вот мой код для создания этой таблицы:

<table border="0">
  <tr>
    <td colspan="3"><h3>Current service costs</h3></td>
  </tr>
  <tr>
    <td width="440"><p>Pharmacist</p></td>
    <td><p style="padding-left:5px!IMPORTANT;">&pound;
        <input value="42500" type="text" name="pharmacist" />
      </p></td>
    <td width="5" rowspan="2"><select>
        <option value="perannum">per annum</option>
        <option value="perhour">per hour</option>
      </select></td>
  </tr>
  <tr>
    <td><p>Dispenser / Technician</p></td>
    <td><p style="padding-left:5px!IMPORTANT;">&pound;
        <input value="17500" type="text" name="dispenser" />
      </p></td>
  </tr>
  <tr>
    <td colspan="3">&nbsp;</td>
  </tr>
</table>

Ответы [ 4 ]

2 голосов
/ 14 декабря 2011

Вам нужно сделать что-то вроде ниже.при условии, что «select» получил и id «ddlDuration» с использованием JQuery

$('#ddlDuration').change(function(){
    if($(this.val) == 'perhour'{
         pharmacist = $('input[name="pharmacist"]');
         pharmacist.val( calculateHourlyFromAnnual( pharmacist.val() ) );
     }
});

function calculateHourlyFromAnnual( annumRate )
{
    return 100; // calculate the value of the hourly rate based on the per-annum rate
}
1 голос
/ 27 декабря 2011

Разработано решение для вас: http://jsfiddle.net/tive/Gya43/

Javascript

$(function() {
    $('#ddlDuration').change(function() {
        var pharmacist = $('#pharmacist');
        var dispenser = $('#dispenser');

        if ($(this).val() == 'perhour') {
            pharmacist.val(toHour(pharmacist.val()));
            dispenser.val(toHour(dispenser.val()));
        } else {
            pharmacist.val(toAnnual(pharmacist.val()));
            dispenser.val(toAnnual(dispenser.val()));
        }
    });

    function toHour(annumRate) {
        var num = (annumRate / 8760);
        return num.toPrecision(annumRate.length);
    }

    function toAnnual(hourRate) {
        var num = (hourRate * 8760);
        return num.toFixed(0);
    }
});

Если у вас возникли проблемы с num.toFixed (2), попробуйте num.toPrecision (2), так как это будет более точно.

EDIT: Я заметил, что при использовании длины вашего числа в методе .toPrecision вы всегда будете возвращать исходное значение. Это не так хорошо округлено, но по крайней мере вы не получите никаких ошибок. Если вы хотите настроить это поведение для округленных чисел, я предлагаю использовать поле-заполнитель / атрибут / что-то для хранения значения.

1 голос
/ 21 декабря 2011

Хорошо, я сломаю это.

Во-первых, это решение использует библиотеку jQuery, поэтому вам нужно сослаться на это в разделе <HEAD>.Вы захотите сослаться на файл javascript, в который вы будете помещать свой код:

<html>
    <head>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
        <!-- You need to define the file name and path as appropriate for yourself. -->
        <script type="text/javascript" src="http://path-to-your-url.com/scripts/script.js"></script>
    </head>
...
</html>

Далее вам необходимо внести небольшие изменения в разметку.

<input value="42500" type="text" name="pharmacist" />
<select>
<input value="17500" type="text" name="dispenser" />

становится:

<input value="42500" type="text" name="pharmacist" id="pharmacist" />
<select id="rate">
<input value="17500" type="text" name="dispenser" id="dispenser" />

Смена ключа - новые атрибуты id.Они будут использоваться вашим javascript для идентификации ключевых элементов кода (вы можете использовать для этого атрибуты name, как предлагает JQone - я предпочитаю использовать id с точки зрения стиля ипотому что код селектора jQuery / CSS меньше).

Наконец, вы создаете файл javascript (я называю его «script.js» здесь) и помещаете его в правильную папку на веб-сайте (в соответствии сс путем, используемым в разделе HEAD документа HTML, это будет подпапка корневой папки веб-сайта, называемая «сценарии»).Файл будет иметь следующее содержимое:

// This code sets up the javascript. It is saying: 'when the document is ready, register the "changeRate" function with the "change" event of the select box'. So whenever the select box's value is changed, the function will be called.
$( document ).ready( function() {
    $( 'select#rate' ).change( changeRate );
} );

// This sets the values of the text values based upon the selected rate and the existing value.
var changeRate = function() {
    var rate = $( this );
    var pharmacist = $( 'input#pharmacist' );
    var dispenser = $( 'input#dispenser' );

    if ( rate.val() == 'perhour' ) {
        pharmacist.val( calculateHourlyFromAnnual( pharmacist.val() ) );
        dispenser.val( calculateHourlyFromAnnual( dispenser.val() ) );
    }
    else if ( rate.val() == 'perannum' ) {
        pharmacist.val( calculateAnnualFromHourly( pharmacist.val() ) );
        dispenser.val( calculateAnnualFromHourly( dispenser.val() ) );
    }
};

// Calculates an hourly rate based upon the supplied per annum rate. At the moment this doesn't take into account scenarios where the provided value is empty or is not a number so you will need to adjust appropriately.
function calculateHourlyFromAnnual( annumRate )
{
    -- Making the assumption that a per-annum rate of $50,000 translates to an hourly rate of $50
    return annumRate / 1000; 
}

// Calculates a per-annum rate based upon the supplied hourly rate. At the moment this doesn't take into account scenarios where the provided value is empty or is not a number so you will need to adjust appropriately.
function calculateAnnualFromHourly( hourlyRate )
{
    -- Making the assumption that an hourly rate of $50 translates to a per-annum rate of $50,000
    return hourlyRate * 1000;
}

Скорее всего, формула, которую я использовал для расчета изменения ставки, слишком упрощена, но я не знаю бизнес-требований в вашей ситуации.Вам нужно будет найти правильную формулу самостоятельно.

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

0 голосов
/ 14 декабря 2011

Вы должны использовать JavaScript, чтобы решить эту проблему.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...