jQuery-尝试检查单选按钮是否已选中,但即使没有选中它也表示

时间:2018-12-19 08:03:21

标签: javascript jquery html radio-button

我一直在寻找半小时,以尝试使该功能正常运行,如果再次单击该功能,则会取消选中我的单选按钮。我的函数当前看起来像这样(带有警报以查看到底发生了什么):

function radUncheck(id)
{
    alert(id + " " + $("#" + id).prop('checked'));
    if ($("#" + id).prop('checked'))
    {
        alert($("#" + id).prop('checked'));
        $("#" + id).prop('checked', false);
    }

}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="radio" id="semesterlage-ss-a" name="semesterlage" value="SS" onclick="radUncheck(\'semesterlage-ss-a\')"/>
						<label for="semesterlage-ss-a">SS</label>
<input type="radio" id="semesterlage-ws-a" name="semesterlage" value="WS" onclick="radUncheck(\'semesterlage-ss-a\')"/>
						<label for="semesterlage-ws-a">WS</label>

但是,无论何时尝试,它都会说#semesterlage-ss-a不管是不是,都是正确的(已选中),而#semesterlage-ws-a不管是还是不是,都是错误的(未选中)。不是。

3 个答案:

答案 0 :(得分:0)

您需要为无线电分配数据属性。这表明收音机的状态(问题是收音机始终处于单击状态,已选中)。

function radUncheck(elm) {

  if ($(elm).data('checked')) {     // If the radio is already checked
    $(elm).prop('checked', false);  // Uncheck this radio
    $(elm).data('checked', '');     // Remove data attribute

  } else {
  var name = $(elm).attr('name');   // Get the name of this radio
    $('input[name="' + name + '"]').data('checked', ''); // remove all data attributes from this radio name group
    $(elm).data('checked', true);   // Set new data attribute to this radio to indicate that it is selected
  }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="radio" id="semesterlage-ss-a" name="semesterlage" value="SS" onclick="radUncheck(this)"/>
						<label for="semesterlage-ss-a">SS</label>
<input type="radio" id="semesterlage-ws-a" name="semesterlage" value="WS" onclick="radUncheck(this)"/>
						<label for="semesterlage-ws-a">WS</label>

答案 1 :(得分:0)

您可以使用数据属性来做到这一点。

查看示例:

function radUncheck(el) {
  if ($(el).data('checked')) {
    $('input[type="radio"]').prop('checked', false).data('checked', '');
  } else {
    $('input[type="radio"]').data('checked', '');
    $(el).data('checked', true);
  }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="radio" id="semesterlage-ss-a" data-checked="" name="semesterlage" value="SS" onclick="radUncheck(this)" />
<label for="semesterlage-ss-a">SS</label>
<input type="radio" id="semesterlage-ws-a" data-checked="" name="semesterlage" value="WS" onclick="radUncheck(this)" />
<label for="semesterlage-ws-a">WS</label>

注意:使用console.log代替alert调试代码。

答案 2 :(得分:0)

尝试此操作或点击此链接可能会对您有所帮助。 How to check radio button is checked using JQuery?

 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>  
     function radUncheck(id)
        {
          var radioValue = $("input[name='semesterlage']:checked").val();
          if ($("#radio1").prop("checked")) {
            // do something
          }
          // OR
          if ($("#radio1").is(":checked")) {
            // do something
          }
          // OR if you don't have ids set you can go by group name and value
          // (basically you need a selector that lets you specify the particular input)
          if ($("input[name='radioGroup'][value='1']").prop("checked"))
         }
         <!-- language: lang-html -->
         <input type="radio" id="semesterlage-ss-a" name="semesterlage" value="SS" onclick="radUncheck(\'semesterlage-ss-a\')"/>
                    <label for="semesterlage-ss-a">SS</label>
        <input type="radio" id="semesterlage-ws-b" name="semesterlage" value="WS" onclick="radUncheck(\'semesterlage-ss-b\')"/>
                    <label for="semesterlage-ws-b">WS</label>