当复选框兄弟姐妹更改为选中时显示警报

Posted

技术标签:

【中文标题】当复选框兄弟姐妹更改为选中时显示警报【英文标题】:show alert when checkboxes siblings are changed to be checked 【发布时间】:2021-12-22 21:53:18 【问题描述】:

我有 3 个 div,每个 div 包含 2 个复选框,当我选中同一个 div 中的任何复选框时没有问题,但是当我选中不同 div 中的复选框时,其他复选框未选中。

请参阅live example 或下面的堆栈片段以更好地理解。

我需要在选中其他 div 中显示“您选择的项目将被取消选中”消息的复选框时显示警报。

$("input:checkbox").on('change', e => 
  $(e.target).closest('div').siblings().find('input:checkbox').prop('checked', false);
  alert("your selected items will be unchecked");
);
<div class="dashboard">
  <div id="fr">
    <h3>Fruits</h3>
    <label>
  <input type="checkbox" name="check1" />Kiwi</label>
    <label>
  <input type="checkbox" name="check2" />Jackfruit</label>

  </div>
  <div id="an">
    <h3>Animals</h3>
    <label>
  <input type="checkbox" name="check1" />Tiger</label>
    <label>
 <input type="checkbox" name="check2" />Sloth</label>

  </div>

  <div id="veg">
    <h3>vegetables</h3>
    <label>
  <input type="checkbox" name="check1" />Broccoli</label>
    <label>
  <input type="checkbox" name="check2" />Carrots</label>

  </div>
</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

【问题讨论】:

嗨! “查看实时示例以了解更多信息。”请使用 Stack Snippets([&lt;&gt;] 工具栏按钮)将您的实时示例现场展示; here's how to do one。对于某些人来说,场外资源被阻止,链接随着时间的推移而失效,人们不应该去场外来帮助你。 编辑:问题中的代码似乎复制了您所描述的内容,因此我已将其复制到 Stack Snippet 中。 (不过,我没有查看链接的示例,因此您可能仍需要对其进行编辑。) “我需要在选中其他 div 中的复选框时显示警报,这些复选框显示消息“您选择的项目将被取消选中”。” 我在尝试这样做的问题中的代码...? 我认为您正在寻找解决方案以在其他 div 中不受检查,不是吗? 这是来自 OP previous question 的后续问题 - 功能没有问题,只是添加了“警报”。 【参考方案1】:

您可以使用取消选中其他复选框的相同代码来查看是否会取消选中:

$(e.target).closest('div').siblings().find('input:checkbox:checked').length > 0

使用变量来减少 DOM 导航的数量:

$("input:checkbox").on('change', e => 
  var otherCheckboxes = $(e.target).closest('div').siblings().find("input:checkbox")
  if (otherCheckboxes.filter(":checked").length > 0)
      alert("Your other options will be removed.");
  otherCheckboxes.prop('checked', false);
);
<div class="dashboard">
  <div id="fr">
    <h3>Fruits</h3>
    <label>
  <input type="checkbox" name="check1" />Kiwi</label>
    <label>
  <input type="checkbox" name="check2" />Jackfruit</label>

  </div>
  <div id="an">
    <h3>Animals</h3>
    <label>
  <input type="checkbox" name="check1" />Tiger</label>
    <label>
 <input type="checkbox" name="check2" />Sloth</label>

  </div>

  <div id="veg">
    <h3>vegetables</h3>
    <label>
  <input type="checkbox" name="check1" />Broccoli</label>
    <label>
  <input type="checkbox" name="check2" />Carrots</label>

  </div>
</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

可以通过使用confirm 而不是alert 来改进用户体验(当然也可以使用适当的 UI 对话框)

$("input:checkbox").on('click', e => 
  if ($(this).is(":checked")) 
    return; 
  var otherCheckboxes = $(e.target).closest('div').siblings().find("input:checkbox")
  if (otherCheckboxes.filter(":checked").length > 0) 
      if (confirm("Your other options will be removed.  Continue?")) 
          otherCheckboxes.prop('checked', false);
      
      else 
         return false;
      
  
);
<div class="dashboard">
  <div id="fr">
    <h3>Fruits</h3>
    <label>
  <input type="checkbox" name="check1" />Kiwi</label>
    <label>
  <input type="checkbox" name="check2" />Jackfruit</label>

  </div>
  <div id="an">
    <h3>Animals</h3>
    <label>
  <input type="checkbox" name="check1" />Tiger</label>
    <label>
 <input type="checkbox" name="check2" />Sloth</label>

  </div>

  <div id="veg">
    <h3>vegetables</h3>
    <label>
  <input type="checkbox" name="check1" />Broccoli</label>
    <label>
  <input type="checkbox" name="check2" />Carrots</label>

  </div>
</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

【讨论】:

以上是关于当复选框兄弟姐妹更改为选中时显示警报的主要内容,如果未能解决你的问题,请参考以下文章

选中复选框时jQuery隐藏div,未选中时显示

选中复选框时显示隐藏字段?

Vuetify:复选框在未选中时显示状态已选中,反之亦然

在继续之前如何验证复选框是不是被选中?

iCheck 检查复选框是不是被选中

当用户使用角度选中或取消选中复选框时,向用户显示警报消息