【问题标题】::radio selector with multiple class:具有多个类的无线电选择器
【发布时间】:2017-06-10 10:19:28
【问题描述】:

我有这个 HTML 环境,我想一键设置为.prop('checked', false) 两类单选按钮class=IIlvlclass=IIIlvl。由于相同的类也提供给相关输入,我想知道是否有一种干净的方法可以用一行代码来完成。

例如,这个$('.IIlvl, .IIIlvl').prop('checked', false); 有效,但我认为它不是很干净,因为它也将.prop() 发送到具有相同类的输入(即使没有显示错误,所以可能只是个人偏执)。

我认为正确的解决方案是这样的$('input:radio[class=IIlvl], input:radio[class=IIIlvl]').prop('checked', false);,但这不起作用,我不想将它分成两行代码来划分两个类。

有什么建议吗?

<div id="aNP_SubCatSelectDiv">
    <input type="radio" class="IIlvl" id="aNP_SubCatRadioSelect" name="aNP_SubCatRadio">
    <select class="IIlvl" id="aNP_SubCatSelect" name="aNP_SubCatSelect">
        <option value="null">- Sub category -</option>
    </select>
</div>
<div id="aNP_SubCatInputDiv">
    <input type="radio" class="IIlvl" id="aNP_SubCatRadioInput" name="aNP_SubCatRadio">
    <input type="text" class="IIlvl" id="aNP_SubCatInput" placeholder="New sub category">
</div>

<div class="aNP_FamCodeInputDiv" data-radio-id="aNP_FamCodeRadioSelect">
    <input type="radio" class="IIIlvl aNP_FamCodeRadio" id="aNP_FamCodeRadioSelect" name="aNP_FamCodeRadio" data-input-id="aNP_FamCodeSelect">
        <select class="IIIlvl" id="aNP_FamCodeSelect" name="aNP_FamCodeSelect">
            <option value="null">- Family code -</option>
        </select>
</div>
<div class="aNP_FamCodeInputDiv" data-radio-id="aNP_FamCodeRadioInput">
    <input type="radio" class="IIIlvl aNP_FamCodeRadio" id="aNP_FamCodeRadioInput" name="aNP_FamCodeRadio" data-input-id="aNP_FamCodeInput">
        <input type="text" class="IIIlvl" id="aNP_FamCodeInput" placeholder="New family code">
</div>

【问题讨论】:

  • $('input.IIlvl, input.IIIlvl').prop('checked', false); 指定它们是输入

标签: javascript jquery class radio


【解决方案1】:

您需要做的就是指定元素类型:

$('input.IIlvl, input.IIIlvl').prop('checked', false);

正如@Satpal 所提到的 - 这将针对这些类的所有输入 - 更具体地说,只针对无线电输入:

$(':radio.IIlvl, :radio.IIIlvl').prop('checked', false);

【讨论】:

  • 我猜这和$('.IIlvl, .IIIlvl').prop('checked', false); 差不多,因为每个类都有两个具有相同类的输入:一个收音机和一个文本输入
  • $('.IIlvl, .IIIlvl') 将针对具有这些类的所有内容,$('input.IIlvl, input.IIIlvl') 将仅针对输入元素
  • $('input') 也会选择checkboxes,所以最好使用:radio
  • 如果有多种输入类型,我会这样做的...只是使用提供的信息,input 对我来说似乎最干净@Satpal
【解决方案2】:

你可以使用多个选择器

$(':radio.IIlvl, :radio.IIIlvl').prop('checked', false);

或者,您也可以使用.filter()进行实验

$('.IIlvl, .IIIlvl').filter(':radio').prop('checked', true);

$('.IIlvl, .IIIlvl').filter(':radio').prop('checked', true);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="aNP_SubCatSelectDiv">
  <input type="radio" class="IIlvl" id="aNP_SubCatRadioSelect" name="aNP_SubCatRadio">
  <select class="IIlvl" id="aNP_SubCatSelect" name="aNP_SubCatSelect">
    <option value="null">- Sub category -</option>
  </select>
</div>
<div id="aNP_SubCatInputDiv">
  <input type="radio" class="IIlvl" id="aNP_SubCatRadioInput" name="aNP_SubCatRadio">
  <input type="text" class="IIlvl" id="aNP_SubCatInput" placeholder="New sub category">
</div>

<div class="aNP_FamCodeInputDiv" data-radio-id="aNP_FamCodeRadioSelect">
  <input type="radio" class="IIIlvl aNP_FamCodeRadio" id="aNP_FamCodeRadioSelect" name="aNP_FamCodeRadio" data-input-id="aNP_FamCodeSelect">
  <select class="IIIlvl" id="aNP_FamCodeSelect" name="aNP_FamCodeSelect">
    <option value="null">- Family code -</option>
  </select>
</div>
<div class="aNP_FamCodeInputDiv" data-radio-id="aNP_FamCodeRadioInput">
  <input type="radio" class="IIIlvl aNP_FamCodeRadio" id="aNP_FamCodeRadioInput" name="aNP_FamCodeRadio" data-input-id="aNP_FamCodeInput">
  <input type="text" class="IIIlvl" id="aNP_FamCodeInput" placeholder="New family code">
</div>

注意:$('input') 也会选择checkboxes,所以最好使用:radio

【讨论】:

  • 这也是我写的,但由于我在其他任何地方都没有找到这个解决方案,但在我看来,我认为它在语法上不正确!是:radio.IIlvl 还是.IIlvl:radio 更好?还是一样? filter() 解决方案也不错
  • @brigo,:radio.IIlvl/.IIlvl:radio 都是正确的。性能差异可能很小,但您可以使用其中任何一个
【解决方案3】:

您可以将输入类型添加到您的选择器中,例如:

$('.IIlvl:radio, .IIIlvl:radio').prop('checked', false);

希望这会有所帮助。

$('.IIlvl:radio, .IIIlvl:radio').prop('checked', true);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="aNP_SubCatSelectDiv">
  <input type="radio" class="IIlvl" id="aNP_SubCatRadioSelect" name="aNP_SubCatRadio">
  <select class="IIlvl" id="aNP_SubCatSelect" name="aNP_SubCatSelect">
    <option value="null">- Sub category -</option>
  </select>
</div>
<div id="aNP_SubCatInputDiv">
  <input type="radio" class="IIlvl" id="aNP_SubCatRadioInput" name="aNP_SubCatRadio">
  <input type="text" class="IIlvl" id="aNP_SubCatInput" placeholder="New sub category">
</div>

<div class="aNP_FamCodeInputDiv" data-radio-id="aNP_FamCodeRadioSelect">
  <input type="radio" class="IIIlvl aNP_FamCodeRadio" id="aNP_FamCodeRadioSelect" name="aNP_FamCodeRadio" data-input-id="aNP_FamCodeSelect">
  <select class="IIIlvl" id="aNP_FamCodeSelect" name="aNP_FamCodeSelect">
    <option value="null">- Family code -</option>
  </select>
</div>
<div class="aNP_FamCodeInputDiv" data-radio-id="aNP_FamCodeRadioInput">
  <input type="radio" class="IIIlvl aNP_FamCodeRadio" id="aNP_FamCodeRadioInput" name="aNP_FamCodeRadio" data-input-id="aNP_FamCodeInput">
  <input type="text" class="IIIlvl" id="aNP_FamCodeInput" placeholder="New family code">
</div>

【讨论】:

    猜你喜欢
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 2011-09-03
    相关资源
    最近更新 更多