如果我有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>
在示例中,如果用户点击radio-3
,我需要一种方法来获取1
,以便我可以对其进行一些格式化。感谢。
答案 0 :(得分:25)
您可以使用mouseup
和change
事件。在鼠标按下时,您将获得在选择其他辐射按钮之前选择的radio
按钮的值,而更改事件将提供新选择的radio
按钮。
<强> Live Demo 强>
$('input[name=radios]').mouseup(function(){
alert("Before change "+$('input[name=radios]:checked').val());
}).change(function(){
alert("After change "+$('input[name=radios]:checked').val());
});
答案 1 :(得分:10)
我会将按下的值保存到数组中并使用该值编辑隐藏值。
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 :(得分:1)
在尝试使用选项制作预算计算器时遇到了同样的问题,我使用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");
}
});
答案 3 :(得分:0)
只是为了完成#Adil的回答,如果你有带文字的收音机,如果用户点击了文字,那么之前的收音机就不会得到更新。您可以使用以下内容:
<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());
});
答案 4 :(得分:0)
“已经有一段时间了”这将是一种委婉说法,但万一有人偶然发现了这个问题:
Adil向我指出了正确的方向,但mouseup
仅适用于鼠标触发事件(duh),所以我尝试使用focus
,因为它也发生在change
事件之前,它可以同时使用鼠标和键盘输入(例如,当您使用标签和箭头键更改无线电状态时)。因此,要在用户互动之前访问之前选择/已检查的项目,请使用focus
并获取当前项目,使用您的旧版change
:
//html
<input type="radio" id="radio-1" name="radios" value="1" />
<input type="radio" id="radio-2" name="radios" value="2" />
//js
//if currently checked item is radio-1
$('[name=radios]').on('focus', function() {
console.log($('[name="radios"]:checked').val()); //outputs 1
});
$('[name=radios]').change(function() {
console.log($('[name="radios"]:checked').val()); //outputs 2
});