获取在用户选择新按钮之前选择的单选按钮的值

时间:2012-06-15 14:31:16

标签: jquery radio-button

如果我有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,以便我可以对其进行一些格式化。感谢。

5 个答案:

答案 0 :(得分:25)

您可以使用mouseupchange事件。在鼠标按下时,您将获得在选择其他辐射按钮之前选择的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)

我会将按下的值保存到数组中并使用该值编辑隐藏值。

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 :(得分: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
    });