0

单击复选框按钮时如何制作单选按钮?而且,当复选框未选中时,如何删除单选按钮?

if($("input[type=checkbox]").is(':checked')==true) {
  var val = this.value;
  var dataSplit = val.split("_");
  var result = '<div id="div'+dataSplit[0]+'"><input type="radio" class="choosen"
    name="rdb_'+val+'" value="'+val+'" id="'+dataSplit[0]+
    '" /><label class="'+dataSplit[0]+'">'+dataSplit[1]+'</label><br /></div>';
  $("#result").append(result);
}else if ($("input[type=checkbox]").is(':checked')==false){
  var val1 = this.value;
  var dataSplit1 = val1.split("_");
  $('#div'+dataSplit1[0]).parent.remove();
}

当我选中复选框时代码有效,但当我取消选中复选框时它不起作用。当我取消选中时,仍会添加单选按钮。

注意:尝试选中 2/3 复选框,然后取消选中它们。

4

6 回答 6

3

您可能应该将其绑定到复选框的更改事件,然后执行以下操作:

$("input[type=checkbox]").on('change', function() {
    var val = this.value;
    var dataSplit = val.split("_");
    if (this.checked) {
        var result = '<div id="div'+dataSplit[0]+'"><input type="radio" class="choosen" name="rdb_'+val+'" value="'+val+'" id="'+dataSplit[0]+'" /><label class="'+dataSplit[0]+'">'+dataSplit[1]+'</label><br /></div>';
        $("#result").append(result);
    }else{
        $('#div'+dataSplit[0]).remove();
    }
});

小提琴

于 2012-07-26T08:57:40.787 回答
1

错误:

  • parent().remove()不是parent.remove(),但为什么要删除 div 的父级而不是 div 呢?
  • dataSplit1代替dataSplit

请注意,我使用单击而不是更改,因为某些浏览器在使用更改事件时对象失去焦点之前不会触发事件 - 但是正如 adeneo 在评论中指出的那样,可能有一个不触发单击的制表符/空格键触发器...

在 OSX 上测试FX 中的假设发现 onclick 和 onchange 由空格键或鼠标触发

$("input[type=checkbox]").click(function() {
  var val = this.value;
  var dataSplit = val.split("_");
  if (this.checked) {
    var result = '<div id="div'+dataSplit[0]+'"><input type="radio" class="choosen"
      name="rdb_'+val+'" value="'+val+'" id="'+dataSplit[0]+
      '" /><label for="'+dataSplit[0]+'" class="'+dataSplit[0]+'">'+dataSplit[1]+'</label><br /></div>';
    $("#result").append(result);
  }
  else {
    $('#div'+dataSplit[0]).remove();
  }
});
于 2012-07-26T08:57:11.297 回答
1

这很容易,我将为您概述步骤 - Fiddle - 更新

//Get all checkboxes you want to monitor
var myCheckBoxesContainer = $('.checkboxes_container');

//Monitor the change event of these checkboxes
myCheckBoxesContainer.on('change', '.checkboxes', function(){
    var self = $(this), checked = self.is(':checked'), dataSplit = self.val().split('_');

    //code to create radio button
    if(checked){ 
        /* code goes here */ 
        var result = '<div id="div'+dataSplit[0]+'"><input type="radio" class="choosen" name="rdb_'+val+'" value="'+val+'" id="'+dataSplit[0]+'" /><label class="'+dataSplit[0]+'">'+dataSplit[1]+'</label><br /></div>';
        $("#result").append(result);
    }

    //code to delete the radio button
    else{ 
        /* delete code goes here */ 
        $('#div' + dataSplit[0]).remove();
    }
});
于 2012-07-26T09:02:38.227 回答
0

我认为您可以简化它:

if($("input[type=checkbox]").is(':checked')==true) {
  var val = this.value;
  var dataSplit = val.split("_");
  var result = '<div id="div'+dataSplit[0]+'"><input type="radio" class="choosen"
    name="rdb_'+val+'" value="'+val+'" id="'+dataSplit[0]+
    '" /><label class="'+dataSplit[0]+'">'+dataSplit[1]+'</label><br /></div>';
  $("#result").append(result);
} else { // Just use else here
  var val1 = this.value;
  var dataSplit1 = val1.split("_");
  // $('#div'+dataSplit1[0]).parent.remove(); should 

  $('#div'+dataSplit1[0]).remove(); 
}
于 2012-07-26T08:53:39.137 回答
0

而不是使用“else if”,只尝试“else”作为复选框,只能在未选中时选中。

if($("input[type=checkbox]").is(':checked')==true) 
{
  var val = this.value;
  var dataSplit = val.split("_");
  var result = '<div id="div'+dataSplit[0]+'"><input type="radio" class="choosen"
    name="rdb_'+val+'" value="'+val+'" id="'+dataSplit[0]+
    '" /><label class="'+dataSplit[0]+'">'+dataSplit[1]+'</label><br /></div>';
  $("#result").append(result);
}
else
{
  var val1 = this.value;
  var dataSplit1 = val1.split("_");
  $('#div'+dataSplit[0]).remove();
}
于 2012-07-26T08:55:32.560 回答
0

is(':checked')返回一个布尔值trueor false,不需要将返回值与trueor进行比较false

if ($("input[type=checkbox]").is(':checked') { // if true
  // ...
} else { // if not true == false
  // ..
}

请注意,您的代码中parent应该有一个错字parent()

于 2012-07-26T08:56:20.050 回答