Получите значение переключателя, который был выбран до того, как пользователь выберет новый
Если у меня есть 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());
});