【问题标题】:jQuery - Tried to check if radiobutton is checked, but it says it is even when it isn'tjQuery - 试图检查单选按钮是否被选中,但它说即使没有选中
【发布时间】:2018-12-20 20:58:33
【问题描述】:

我一直在寻找半小时来尝试获得一个功能,如果再次单击,它会取消选中我的单选按钮。我的功能目前看起来像这样(带有警报以查看到底发生了什么):

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 无论是否为假(未选中)不是。

【问题讨论】:

  • 你真的想要一个单选按钮还是一个复选框?
  • @ChrisP 我不能使用复选框,因为您只能选择一个选项,而不是像复选框那样选择多个选项。

标签: javascript jquery html radio-button


【解决方案1】:

您需要为收音机分配一个数据属性。这表示收音机的状态(问题是收音机始终处于点击状态)。

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>

【讨论】:

  • \' 是必要的,因为在我的实际代码中,整个内容都被''包围。无论如何,它并不能真正解决问题。如果您运行 sn-p,您会看到,无论何时单击 SS,它都会为您提供值“true”,而无论何时单击 WS,它都会为您提供值“false”。那是我的问题...
  • 这很正常,因为您总是选择 SS 单选按钮。如果选择了 WS 收音机,那是错误的
  • 更新了我的答案。选择WS时返回true,否则返回false
  • console.log 现在看起来是正确的,但是单选按钮仍然无法选择...
  • 我已经更新了我的答案。这应该可以满足您的需求
【解决方案2】:

试试这个或点击这个链接可能对你有帮助。 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>

【讨论】:

  • 这基本上就是我所做的......不幸的是问题仍然存在。
【解决方案3】:

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

参见示例:

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 来调试您的代码。

【讨论】:

  • console.log 仍然为 SS 提供始终为真,为 WS 提供始终为假。 SS 现在似乎无法检查,虽然我不明白怎么做,但 WS 仍然不是。
  • 这是因为你总是在这两种情况下传递 SS id。
  • 你通过参数传递相同的id:semesterlage-ss-a
  • 我刚刚找到它,我真的找到了!感谢您了解
猜你喜欢
  • 2014-04-23
  • 2014-07-02
  • 2023-03-08
  • 1970-01-01
  • 2014-02-06
  • 1970-01-01
  • 1970-01-01
  • 2016-01-11
  • 2012-06-18
相关资源
最近更新 更多