使单选按钮表现得像复选框

making a radio button behave like a checkbox

出于与主题无关的原因,我有一组 2 个单选按钮,我需要它们的行为类似于复选框。我的意思是,其中一个单选按钮将被隐藏,另一个需要能够被清除(实际上检查隐藏的那个)。

看起来像这样:

<ul id="id_member_field_request-demo-1">
    <li>
        <label for="id_member_field_request-demo-1_0"><input type="radio" name="member_field_request-demo-1" value="Please contact me to schedule a 60 minute, 1-on-1 demo" field_id="8394681" id="id_member_field_request-demo-1_0">Please contact me to schedule a 60 minute, 1-on-1 demo</label>
    </li>
    <li>
        <label for="id_member_field_request-demo-1_1"><input type="radio" name="member_field_request-demo-1" value="false" field_id="8394681" id="id_member_field_request-demo-1_1">false</label>
    </li>
</ul> 

到目前为止我有:

var radio1 = $('#id_member_field_request-demo-1_0');
var radio2 = $('#id_member_field_request-demo-1_1');

radio2.prop('checked', true).css('display', 'none');

radio1.click(function() {
  if(radio1.is(':checked')) {
    radio2.click();
  }
});

不幸的是,单击可见单选按钮 (radio1) 总是 returns 它已被选中...因此永远无法进入选中状态。我需要知道以前是不是 checked/unchecked.

我能想到的唯一方法是将当前选中的收音机保存在一个变量中,然后从那里开始......所以我最终得到这个:

var radio1 = $('#id_member_field_request-demo-1_0');
var radio2 = $('#id_member_field_request-demo-1_1');

radio2.prop('checked', true).parent().css('display', 'block');

var checkedId = radio2.attr('id');
//console.log(checkedId);

radio1.click(function() {
  if(checkedId == radio1.attr('id')) {
    radio2.prop('checked', true);
    checkedId = radio2.attr('id');
  } else {
    checkedId = radio1.attr('id');
  }
});

这行得通 - 只是检查一下是否有更直接的方法?

我建议使用 .data() 保持内部检查状态。

var radio1 = $('#id_member_field_request-demo-1_0');
var radio2 = $('#id_member_field_request-demo-1_1');

radio2.prop('checked', true).hide();
radio1.prop('checked', true).data('checked', true).show();

radio1.click(function() {
  if ($(this).data('checked')) {
    $(this).data('checked', false);
    radio2.prop('checked', true);
  } else {
    $(this).prop('checked', true).data('checked', true);
  }
  console.log("radio1 =", radio1.prop("checked"), "radio2 =", radio2.prop("checked"));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="radio" name="demo" id="id_member_field_request-demo-1_0" value="0">
<input type="radio" name="demo" id="id_member_field_request-demo-1_1" value="1">