这是其中一个单选按钮的代码部分:
$("#new").click(function(){
if( $('#new').is(':checked') )
$.jGrowl("You already have this option selected!", life: 1500});
else
changeOption(1);
});
现在,我知道else
部分永远不会运行,因为单击事件上已经检查了单选按钮。我想知道的是,是否有一个事件可以让我捕获单选按钮的状态(即将被点击),并因此确定他是否还没有被点击,如果是这样,将选项更改为新选中之一。
答案 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);
});
甚至适用于键盘事件。
答案 1 :(得分:4)
请改用mouseup事件。
$("#new").mouseup(function(){
if( $('#new').is(':checked') )
$.jGrowl("You already have this option selected!", life: 1500});
else
changeOption(1);
});
修改强>
尽管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);
}
});