是否有关于被检查的单选按钮之前的事件

时间:2012-08-28 12:27:47

标签: jquery

这是其中一个单选按钮的代码部分:

$("#new").click(function(){
    if( $('#new').is(':checked') )
        $.jGrowl("You already have this option selected!", life: 1500});
    else
        changeOption(1);
});

现在,我知道else部分永远不会运行,因为单击事件上已经检查了单选按钮。我想知道的是,是否有一个事件可以让我捕获单选按钮的状态(即将被点击),并因此确定他是否还没有被点击,如果是这样,将选项更改为新选中之一。

4 个答案:

答案 0 :(得分:6)

将初始值存储在数据属性中,并在更改时使用该值:

$.each($("input[type='radio']"), function(i,e) {
    $(e).data('check', e.checked);
});

$("#new").on('click keyup', function(){
    if( $(this).data('check') ) {
        alert("You already have this option selected!");
    }else{
        alert("This option is unselected");
    }
    $(this).data('check', this.checked);
});​

FIDDLE

甚至适用于键盘事件。

答案 1 :(得分:4)

请改用mouseup事件。

$("#new").mouseup(function(){
    if( $('#new').is(':checked') )
        $.jGrowl("You already have this option selected!", life: 1500});
    else
        changeOption(1);
});

fiddle.

修改
尽管mouseup事件有效,但使用mousedown事件似乎更合乎逻辑。 Here's that fiddle

答案 2 :(得分:2)

mousedown事件应该有效。它在单击元素时触发,然后释放鼠标按钮。

答案 3 :(得分:0)

为什么不取消选中它,如果可能没有检查?

$("#new").click(function(){
    if( $('#new').is(':checked') ){
        $.jGrowl("You already have this option selected!", life: 1500});
        $('#new').attr('checked', false);
    } else {
        changeOption(1);
        $('#new').attr('checked', true);
    }
});