Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 取消选中引导单选按钮_Javascript_Jquery_Twitter Bootstrap_Radio - Fatal编程技术网

Javascript 取消选中引导单选按钮

Javascript 取消选中引导单选按钮,javascript,jquery,twitter-bootstrap,radio,Javascript,Jquery,Twitter Bootstrap,Radio,我正在尝试取消选中按钮组中带有标签的单选按钮,如下所示: <div> <label class="btn btn-primary"> <input type="radio" name="radio1" class="radio1" /> Radio1 </label> </div> <div> <label cl

我正在尝试取消选中按钮组中带有标签的单选按钮,如下所示:

<div>
            <label class="btn btn-primary">
              <input type="radio" name="radio1" class="radio1" />
    Radio1
            </label>
</div>
<div>
            <label class="btn btn-primary">
              <input type="radio" name="radio2" class="radio2" />
    Radio2
            </label>
</div>
$('.btn').on('click', function(e) {
      // Check if another option was previously checked
      if ($(this).parent().parent().find(':radio:checked').length == 1) {
        inner_input = $(this).find('input');
        if (inner_input.prop('checked')) {
          e.stopImmediatePropagation();
          e.preventDefault();
          inner_input.prop('checked', false);
          $(this).removeClass('active');
        }
});

无线电1
无线电2
$('.btn')。在('click',函数(e)上{
//检查之前是否选中了其他选项
if($(this.parent().parent().find(':radio:checked')。长度==1){
内部输入=$(this.find('input');
if(内部_input.prop('checked')){
e、 停止即时复制();
e、 预防默认值();
内部输入.prop('checked',false);
$(this.removeClass('active');
}
});
不幸的是,它不起作用,即使在第二次单击后标签仍处于活动状态。

为什么会发生这种情况? 首先让我们看看什么是
单击
鼠标点击
鼠标向下
事件:

鼠标向下移动

当用户按下鼠标按钮时激发

鼠标悬停

当用户释放鼠标按钮时激发

单击

在同一元素上发生mousedown和mouseup事件时激发。 当用户激活具有键盘焦点的元素时激发 (通常按Enter键或空格键)

因此,当使用
单击
事件时,单选按钮被选中,这意味着
radio.is(':checked')
将始终返回
true
,除非禁用默认行为。因此,您可以通过两种方式执行所需操作:


1-使用
Mouseup
事件,在这种情况下,您可以确定单选按钮的状态是否已选中。但是,通过这种方式,您需要一点额外的代码来禁用
单击
事件的默认值

$('label').on('mouseup', function(e){
    var radio = $(this).find('input[type=radio]');

  if( radio.is(':checked') ){
    radio.prop('checked', false);

  } else {
    radio.prop('checked', true);

  }

});

// Disable default behavior
$('label').click(function(e){
    e.preventDefault();
});


和2,您可以将其全部打包,禁用
单击
的默认行为,并在一个事件中执行其余操作:

$('label').click(function(e) {
    e.preventDefault();

    var radio = $(this).find('input[type=radio]');

    if (radio.is(':checked')) {
        radio.prop('checked', false);

    } else {
        radio.prop('checked', true);

    }
});

我确实有目的地使用了两个不同的事件来回答这个问题,有时在更复杂的问题中,您可能会被迫使用
mouseup
事件,而不是
click

为什么会发生这种情况? 首先让我们看看什么是
单击
鼠标点击
鼠标向下
事件:

鼠标向下移动

当用户按下鼠标按钮时激发

鼠标悬停

当用户释放鼠标按钮时激发

单击

在同一元素上发生mousedown和mouseup事件时激发。 当用户激活具有键盘焦点的元素时激发 (通常按Enter键或空格键)

因此,当使用
单击
事件时,单选按钮被选中,这意味着
radio.is(':checked')
将始终返回
true
,除非禁用默认行为。因此,您可以通过两种方式执行所需操作:


1-使用
Mouseup
事件,在这种情况下,您可以确定单选按钮的状态是否已选中。但是,通过这种方式,您需要一点额外的代码来禁用
单击
事件的默认值

$('label').on('mouseup', function(e){
    var radio = $(this).find('input[type=radio]');

  if( radio.is(':checked') ){
    radio.prop('checked', false);

  } else {
    radio.prop('checked', true);

  }

});

// Disable default behavior
$('label').click(function(e){
    e.preventDefault();
});


和2,您可以将其全部打包,禁用
单击
的默认行为,并在一个事件中执行其余操作:

$('label').click(function(e) {
    e.preventDefault();

    var radio = $(this).find('input[type=radio]');

    if (radio.is(':checked')) {
        radio.prop('checked', false);

    } else {
        radio.prop('checked', true);

    }
});


我确实有目的地使用了两个不同的事件来回答这个问题,有时在更复杂的问题中,您可能会被迫使用
鼠标点击
事件,而不是
点击

当前答案中的解决方案对无线电输入很有效。但对按钮组不起作用。为了避免其他搜索者的麻烦,请遵循代码mi这将有助于:

$(“标签”)。单击(函数(e){
e、 预防默认值();
var radio=$(this.find('input[type=radio]');
if(radio.is(':checked')){
e、 停止即时复制();
$(此).removeClass(“活动”);
radio.prop(“已检查”,错误);
}否则{
radio.prop(“已检查”,为真);
}
});

选择1
选择2
选择3

当前答案中的解决方案适用于无线电输入。但它不适用于按钮组。为避免其他搜索者遇到麻烦,以下代码可能会有所帮助:

$(“标签”)。单击(函数(e){
e、 预防默认值();
var radio=$(this.find('input[type=radio]');
if(radio.is(':checked')){
e、 停止即时复制();
$(此).removeClass(“活动”);
radio.prop(“已检查”,错误);
}否则{
radio.prop(“已检查”,为真);
}
});

选择1
选择2
选择3

我已经阻止了默认行为,不是吗?@Lior是的,但是,
单击
并不是取消选中单选按钮的合适事件,这不是你想要的吗?是的,这正是我想要的。你能告诉我为什么它不能与“单击”一起工作吗?鼠标和单击不是有同样的效果吗?@Lior我更新了答案,解释了为什么会出现这种情况ppensI已经阻止了默认行为,不是吗?@Lior是的,但是,
单击
不是取消选中单选按钮的合适事件,这不是你想要的吗?是的,这正是我想要的。你能告诉我为什么“单击”不起作用吗?鼠标推送和单击不是有同样的效果吗?@Lior我更新了答案,解释了为什么会发生这种情况这对我有效,只是在
radio.prop('checked',true);
下缺少一行将.active类添加到标签这对我有效,只是在
radio.prop('checked',true);
下缺少一行将.active类添加到标签