Получите значение переключателя, который был выбран до того, как пользователь выберет новый

Если у меня есть 3 переключателя, есть ли способ через jQuery узнать значение того, которое было выбрано до того, как пользователь нажмет новый?

<div id="radio-group">
    <input type="radio" id="radio-1" name="radios" value="1" checked="true" />
    <input type="radio" id="radio-2" name="radios" value="2" />
    <input type="radio" id="radio-3" name="radios" value="3" />
</div>

В примере avove, если пользователь нажимает на radio-3, мне нужен способ получить 1, чтобы я мог выполнить некоторую готовность к нему. Спасибо.

Ответ 1

Я бы сохранил нажатые значения в массиве и отредактировал скрытое значение с этим.

http://jsfiddle.net/BQDdJ/6/

HTML

<div id="radio-group">
    <input type="radio" id="radio-1" name="radios" value="1" checked="true" />
    <input type="radio" id="radio-2" name="radios" value="2" />
    <input type="radio" id="radio-3" name="radios" value="3" />
    <input type="hidden" id="radio-previous" name="radio-previous" />
</div>​

JavaScript

$(document).ready(function(){
    var clicks = new Array();
    clicks[0] = 1 //this should be the default value, if there is one

    $('input[name$="radios"]').change(function(){
       clicks.push($(this).val()) 
       $('#radio-previous').val(clicks[clicks.length-2])
    })
})

Ответ 2

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

Живая демонстрация

$('input[name=radios]').mouseup(function(){
    alert("Before change "+$('input[name=radios]:checked').val());
}).change(function(){
    alert("After change "+$('input[name=radios]:checked').val());
})​;

Ответ 3

У меня была такая же проблема при попытке сделать калькулятор бюджета с параметрами, я решил его использовать переменную var для хранения последнего значения;

            var before = -1;
            $('input:checkbox, input:radio').click(function() {
                // +(str) =  number(str)
                var value = +$(this).val();
                if ($(this).is(":checkbox")) {
                    if ($(this).is(":checked")) {
                        total += value;
                    } else {
                        total -= value;
                    }
                }
                else {
                    if (before < 0) {
                        total += value;
                        before = value;
                    } else {
                        total -= before;
                        total += value;
                        before = value;
                    }
                }
                $("#sub-total").text(total * hourly_rate);
                if ($(this).is("[data-toggle]")) {
                    $("#" + $(this).attr("data-toggle")).slideToggle("fast");
                }
            });

Ответ 4

Просто чтобы ответить #Adil, если у вас есть радио с текстом, если пользователь нажимает на текст, предыдущий Radio не обновляется. Вы можете использовать следующее:

<label>
   <input type="radio" name="radioName">
   text
</label>

И js:

var $previousRadio;
var $inputs = $('input[name=radioName]');
$inputs.parents("label").mouseup(function () {
    $previousRadio = $inputs.filter(':checked');
});
$inputs.change(function () {
    alert($previousRadio.val());
});