Расчет радиокнопок - PullRequest
       3

Расчет радиокнопок

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

У меня есть набор переключателей для определенных продуктов.Я хочу, чтобы в нижней части формы отображалось поле итогов, которое суммирует итоговые значения всех переключаемых кнопок.Я знаю, что это можно сделать с помощью значения переключателя, а затем с помощью некоторого JavaScript.

Проблема в том, что я не думаю, что могу использовать этот метод, так как мне нужно, чтобы значения были такими, как они есть в приведенном ниже коде, поэтому, когда мне отправляют электронное письмо из формы отправки, я вижу, какие опции есть у пользователяchoosen.

Какие-либо предложения без использования javascript или использования значений?

<input class="radio" type="radio" name="keystage1yr1" value="Paper" /> <span>&#163;25</span>

<input class="radio" type="radio" name="keystage1yr1" value="CD" /> <span>&#163;25 excl VAT</span>

<input class="radio" type="radio" name="keystage1yr1" value="Paper & CD" /> <span>&#163;40 excl VAT</span>

<input class="radio" type="radio" name="keystage1yr2" value="Paper" /> <span>&#163;25</span>

<input class="radio" type="radio" name="keystage1yr2" value="CD" /> <span>&#163;25 excl VAT</span>

<input class="radio" type="radio" name="keystage1yr2" value="Paper & CD" /> <span>&#163;40 excl VAT</span>

<input class="radio" type="radio" name="keystage1save" value="Paper" /> <span>&#163;47.50</span>

<input class="radio" type="radio" name="keystage1save" value="CD" /> <span>&#163;47.50 excl VAT</span>

<input class="radio" type="radio" name="keystage1save" value="Paper & CD" /> <span>&#163;75 excl</span> 

Можно ли добавить что-то вроде price="20" и т. д. для каждой радиокнопки, а затем добавить их?

РЕДАКТИРОВАТЬ

@ Jamiec answer отлично работал, добавив дополнительный кошелек "data-price" и суммируя с использованием некоторого JavaScript.

Хорошо, так что поиграйтес кодом Jamiec я понял, что он добавляет общее количество переключателей, которые были проверены, но больше не проверены.Так как у меня также есть некоторый javascript, который выполняет следующее:

Может быть выбрана только одна радиокнопка из name="keystage1yr1". Может быть выбрана только одна радиокнопка из name="keystage1yr2".

Но если есть радиокнопка.из name="keystage1save" выбирается, тогда любой переключатель из name="keystage1yr1" и name="keystage1yr2", который был выбран, будет отменен.

Проблема заключается в том, что с javascript, предоставленным @Jamiec, итоговое значение будет по-прежнему иметь значенияname="keystage1yr1" и name="keystage1yr2", если выбран name="keystage1save".Мне нужно просто подсчитать сумму из переключателей, которые выбраны

EDIT2 @Jamiec обновил ответ, чтобы не сохранять значения в кеше, исправил проблему

Ответы [ 3 ]

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

Без Javascript, нет - Определенно нет.

Анализ текста внутри промежутка рядом с каждым радио, используя Javascript, да - но довольно сложно

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

Добавляя дополнительный атрибут (предпочтительно data-amount), используйте библиотеку, такую ​​как jQuery, да - easy peasy lemon squeezy!


Пример использования вами jQuery.

Увеличение каждого из ваших радиомодулей:

<input class="radio" type="radio" name="keystage1yr1" value="Paper" data-price="25" /> <span>&#163;25</span>

Добавьте общее поле наподобие:

<input id="total" type="text">

И используйте следующеекод.

var values = {}; // index to store the selection from each named group of radio's

$('input:radio').change(function(){
  var name = $(this).attr('name');
  values[name] = parseFloat($(this).data('price'));
  var total = 0.0;
    $.each(values,function(i,e){
        total += e;
    });
    $('#total').val(total.toFixed(2));
});

Пример в реальном времени: http://jsfiddle.net/UL2JP/


Редактировать , приведенный выше код добавляет только те флажки, которые, к сожалению, установленыкэширует то, что было ранее выбрано в объекте javascript values.Если с помощью кода вы сняли некоторые флажки, вам необходимо пересчитать то, что было выбрано.

Появится обновление этого кода, которое будет выполнять то, что вы описываете в своих комментариях:

var values = {};

$('input[name="keystage1save"]').click(function(){
    $('input:radio:not([name="keystage1save"])').prop('checked',false);
    values = {};
});

$('input:radio').change(function(){
  var name = $(this).attr('name');
  values[name] = parseFloat($(this).data('price'));
  var total = 0.0;
    $.each(values,function(i,e){
        total += e;
    });
    $('#total').val(total.toFixed(2));
});

Пример из жизни: http://jsfiddle.net/UL2JP/1/


Редактировать 2 : просто мысль, что на самом деле нет необходимости кэшировать выбранные значения, было бы быстрее просто вычислить на лету:

$('input[name="keystage1save"]').click(function(){
    $('input:radio:not([name="keystage1save"])').prop('checked',false);
});

$('input:radio').change(function(){
    var total = 0.0;
    $('input:radio:checked').each(function(){
          total += parseFloat($(this).data('price'));
    });
    $('#total').val(total.toFixed(2));
});

Живой пример: http://jsfiddle.net/UL2JP/2/

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

Вы можете сделать три вещи:

  • Использовать AJAX и сделать это правильно на стороне сервера
  • Создать массив с идентификаторами радиокнопок и значений, а затем щелкнуть поискзначение и добавьте это к общему количеству
  • Неправильное использование атрибута ID для хранения значения и написать JS, чтобы сложить его.Например # val1_1 # val2_4 и т. Д. (Не рекомендуется)

Хотите, чтобы я включил один из этих вариантов.

Если вы не хотите использовать AJAXЯ бы предложил перейти ко второму варианту, это довольно элегантно.

HTML:

<input class="radio" type="radio" id="ks1p" name="keystage1yr1" value="Paper" /> <span>&#163;25</span>

<input class="radio" type="radio" id="ks1c" name="keystage1yr1" value="CD" /> <span>&#163;25 excl VAT</span>

<input class="radio" type="radio" id="ks1cp" name="keystage1yr1" value="Paper & CD" /> <span>&#163;40 excl VAT</span>

<input class="radio" type="radio" id="ks2p" name="keystage1yr2" value="Paper" /> <span>&#163;25</span>

//etc..

JS:

var prices= new Array();
prices["ks1p"]=1;
prices["ks1c"]=2;
prices["ks1cp"]=3;
//etc
var lastPrice = new Array();
lastPrice ["keystage1yr1"]=0;
lastPrice ["keystage1yr2"]=0;
//etc
var totalPrice = 0;
$('.radio').click(function(){
   var id = $(this).attr('id');
    var name= $(this).attr('name');
   if(lastPrice[name] != 0){
     totalPrice = totalPrice  - lastPrice[name];
   }
   lastPrice[name] = prices[id];
   totalPrice = totalPrice +  prices[id];
   alert(totalPrice);
});

Fiddle: http://jsfiddle.net/nggLr/

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

, если вы строите это, используя некоторый код на стороне сервера, используйте его для расчета общей цены

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