2012-08-28 29 views
4

这是代码为单选按钮的一个部分:是否有一个事件之前的单选按钮,是关于检查

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

现在,据我所知,else部分将永远不会运行,因为单选按钮将在点击事件中被检查。我想知道的是,是否有一个事件可以让我捕获单选按钮的状态(即将被点击),从而确定他是否尚未点击,如果是这样,请将选项更改为新选定的一。

回答

4

改为使用mouseup事件。

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

fiddle.

编辑
即使鼠标松开事件的作品,似乎更符合逻辑用鼠标按下事件。 Here's that fiddle

2

mousedown事件应该工作。在释放鼠标按钮之前单击元素时触发。

+1

这里是工作解决方案的小提琴http://jsfiddle.net/joplomacedo/SCF5K/ – banzomaikaka

+0

@JOPLOmacedo:是的,你说得对,你为什么不发表答案,所以我可以接受? user1546010:它是适用于我的mouseup事件,不是mousedown。 – Nikola

+0

@Nikola okey dokey! – banzomaikaka

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); 
    } 
}); 
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

与键盘事件甚至工程。

+0

啊,如果没有,为幽默尝试+1;) – Nikola

+0

第三个代码块实际上是一个很好的解决方案(我开始阅读这个答案,让我对mindReader事件的希望瞬间笑起来,然后转移到下一个问题没有意识到这是一个严肃的答案)。 – Synexis

相关问题