首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选中相应复选框的输入字段。

选中相应复选框的输入字段。
EN

Stack Overflow用户
提问于 2022-06-20 13:20:15
回答 3查看 99关注 0票数 3

我正在做一个表单,我只从一组复选框中选择一个复选框。我想使输入字段需要其相应的复选框被选中。

在这里,我只能选择一个复选框并使其相应的文本字段成为必需的。我想,如果我选择第n复选框,那么第n输入字段将强制填写。

代码语言:javascript
复制
$(document).ready(function() {
  $('.check').click(function() {
    let name = $(this).attr("name")
    if ($(this).prop('checked')) {
      $('.check[name="' + name + '"]').prop('required', false)
    } else {
      $('.check[name="' + name + '"]').prop('required', true)
    }
    $('.check[name="' + name + '"]').not(this).prop('checked', false)
  });
});
代码语言:javascript
复制
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">

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

<div class="row">
  <div class="border border-dark col-lg-7 ps-4">
    <input type="checkbox" id="OVD" name="OVD" class="check form-check-input" required>
    <h5 class="d-inline">A. Passport Number</h5>
  </div>
  <div class="border border-dark col-lg-5">
    <input type="text" class="form-control border-0">
  </div>
</div>
<div class="row">
  <div class="border border-dark col-lg-7 ps-4">
    <input type="checkbox" id="OVD" name="OVD" class="check form-check-input" required>
    <h5 class="d-inline">B. Voter ID Card</h5>
  </div>
  <div class="border border-dark col-lg-5">
    <input type="text" class="form-control border-0">
  </div>
</div>
<div class="row">
  <div class="border border-dark col-lg-7 ps-4">
    <input type="checkbox" id="OVD" name="OVD" class="check form-check-input" required>
    <h5 class="d-inline">C. Driving Licence</h5>
  </div>
  <div class="border border-dark col-lg-5">
    <input type="text" class="form-control border-0">
  </div>
</div>
<div class="row">
  <div class="border border-dark col-lg-7 ps-4">
    <input type="checkbox" id="OVD" name="OVD" class="check form-check-input" required>
    <h5 class="d-inline">D. NREGA Job Card</h5>
  </div>
  <div class="border border-dark col-lg-5">
    <input type="text" class="form-control border-0">
  </div>
</div>
<div class="row">
  <div class="border border-dark col-lg-7 ps-4">
    <input type="checkbox" id="OVD" name="OVD" class="check form-check-input" required>
    <h5 class="d-inline">E. National Population Register Letter</h5>
  </div>
  <div class="border border-dark col-lg-5">
    <input type="text" class="form-control border-0">
  </div>
</div>
<div class="row">
  <div class="border border-dark col-lg-7 ps-4">
    <input type="checkbox" id="OVD" name="OVD" class="check form-check-input" required>
    <h5 class="d-inline">F. Proof of Possession on Aadhaar</h5>
  </div>
  <div class="border border-dark col-lg-5">
    <input type="text" class="form-control border-0">
  </div>
</div>

EN

回答 3

Stack Overflow用户

发布于 2022-06-20 14:18:08

DOM遍历通常比操作名称更简单。在这里,我们可以找到同一行中的第一个文本输入。

代码语言:javascript
复制
$(document).ready(function() {
  $('.check').click(function() {
    const textInput = $(this).closest('.row').find('input[type="text"]').first()

    if ($(this).prop('checked')) {
      textInput.prop('required', false)
    } else {
      textInput.prop('required', true)
    }

    $('.check[name="' + name + '"]').not(this).prop('checked', false)
  });
});
代码语言:javascript
复制
[type="text"][required] {
  background: pink !important;
}
代码语言:javascript
复制
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">

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

<div class="row">
  <div class="border border-dark col-lg-7 ps-4">
    <input type="checkbox" id="OVD" name="OVD" class="check form-check-input" required>
    <h5 class="d-inline">A. Passport Number</h5>
  </div>
  <div class="border border-dark col-lg-5">
    <input type="text" class="form-control border-0">
  </div>
</div>
<div class="row">
  <div class="border border-dark col-lg-7 ps-4">
    <input type="checkbox" id="OVD" name="OVD" class="check form-check-input" required>
    <h5 class="d-inline">B. Voter ID Card</h5>
  </div>
  <div class="border border-dark col-lg-5">
    <input type="text" class="form-control border-0">
  </div>
</div>
<div class="row">
  <div class="border border-dark col-lg-7 ps-4">
    <input type="checkbox" id="OVD" name="OVD" class="check form-check-input" required>
    <h5 class="d-inline">C. Driving Licence</h5>
  </div>
  <div class="border border-dark col-lg-5">
    <input type="text" class="form-control border-0">
  </div>
</div>
<div class="row">
  <div class="border border-dark col-lg-7 ps-4">
    <input type="checkbox" id="OVD" name="OVD" class="check form-check-input" required>
    <h5 class="d-inline">D. NREGA Job Card</h5>
  </div>
  <div class="border border-dark col-lg-5">
    <input type="text" class="form-control border-0">
  </div>
</div>
<div class="row">
  <div class="border border-dark col-lg-7 ps-4">
    <input type="checkbox" id="OVD" name="OVD" class="check form-check-input" required>
    <h5 class="d-inline">E. National Population Register Letter</h5>
  </div>
  <div class="border border-dark col-lg-5">
    <input type="text" class="form-control border-0">
  </div>
</div>
<div class="row">
  <div class="border border-dark col-lg-7 ps-4">
    <input type="checkbox" id="OVD" name="OVD" class="check form-check-input" required>
    <h5 class="d-inline">F. Proof of Possession on Aadhaar</h5>
  </div>
  <div class="border border-dark col-lg-5">
    <input type="text" class="form-control border-0">
  </div>
</div>

票数 1
EN

Stack Overflow用户

发布于 2022-06-20 14:33:47

类似于伊舍伍德的回答--当我把它粘贴进去时,我有几乎相同的代码,但他更快。

然而,我会做一些不同的事情:当您第一次检测到单击复选框时,取消选中所有其他复选框(使复选框像单选按钮一样工作),还可以伪造相关输入字段的所有required属性--这允许用户改变主意并选择不同的复选框。

如果您给每个“相关联的输入字段”提供一个特殊的类(如.chkAssoc ),则此任务的代码会更简单一些。

代码语言:javascript
复制
$(document).ready(function() {
    $('.check').click(function() {
        //uncheck all checkboxes, then re-check only this one
        $('.check').each(function(){
            $(this).prop('checked') = false;
        });
        $(this).prop('checked') = true;

        //reset all associated inputs to Not Required
        $('.chkAssoc').each(function(){
            $(this).prop('required', false);
        });
        //set the correct associated input as required
        if ($(this).prop('checked')) {
            const assocInput = $(this).closest('div.row').find('input[type=text]');
            assocInput.prop('required', true);
        }
    });
}); //end document.ready
票数 0
EN

Stack Overflow用户

发布于 2022-06-20 15:55:05

为了说明我的观点,这比严格需要的要详细一些。

id="OVD"

  • I添加了一些类,以帮助说明输入组的作用域和与之相关的“目标”,并将其设置为给定请求的“必需”。
  • 是无效的。我添加引导仅仅是为了一个视觉效果,因为你似乎在使用它,所以
  • 你可能会有不止一个“组”,所以这里我创建了一个“奶酪”组--也是
  • --我使用了一些数据属性作为切换,并过滤了
  • ,我添加了一个“绿色”背景来显示活动组作为一个指示符,这样您就可以看到"OVD“和”乳酪“work
  • ,我添加了一个视觉元素来显示我们上次单击的

F 214

代码语言:javascript
复制
$(function() {
  $('.check').on('click', function() {
    const name = $(this).data("targetName");
    // set all to not required
    const targets = $('.input-block');
    const targetsInScope = targets
      .filter(function() {
        return $(this).has('.check[data-target-name="' + name + '"]').length == 1;
      });
    const isChecked = this.checked;
    this.required = isChecked;
    // set all to not required if this one is checked, otherwise make them all required
    targetsInScope.find('.target-input').prop('required', isChecked);
    targetsInScope.find('.check.form-check-input').prop('required', isChecked);
    //remove the background - just for an indicator on all of them
    targetsInScope.each(function() {
      this.dataset.activeBlock = "";
    });

    targetsInScope.find('.check[data-target-name="' + name + '"]')
      .not(this).prop('checked', false);
    const block = $(this).closest('.input-block');
    // just to show what we have in scope
    $('.currently-active')
      .text(name + ":" + isChecked + ":" + block.find('.d-inline').text());
    block.find('.target-input').prop('required', isChecked);
    block.get(0).dataset.activeBlock = isChecked ? "active" : "";
  });
});
代码语言:javascript
复制
.input-block[data-active-block="active"] {
  background-color: #ddffdd;
}
代码语言:javascript
复制
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.2/dist/umd/popper.min.js" integrity="sha384-IQsoLXl5PILFhosVNubq5LC7Qb9DXgDA9i+tQ8Zj3iwWAwPtgFTxbJ8NT4GN1R8p" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.min.js" integrity="sha384-cVKIPhGWiC2Al4u+LWgxfKTRIcfu0JTxR+EQDz/bgldoEyl4H0zUF0QKbrJ0EcQF" crossorigin="anonymous"></script>

<div class="row input-block">
  <div class="border border-dark col-lg-7 ps-4">
    <input type="checkbox" data-target-name="OVD" class="check form-check-input" required>
    <h5 class="d-inline">A. Passport Number</h5>
  </div>
  <div class="border border-dark col-lg-5">
    <input type="text" class="target-input form-control border-0">
  </div>
</div>
<div class="row input-block">
  <div class="border border-dark col-lg-7 ps-4">
    <input type="checkbox" data-target-name="OVD" class="check form-check-input" required>
    <h5 class="d-inline">B. Voter ID Card</h5>
  </div>
  <div class="border border-dark col-lg-5">
    <input type="text" class="target-input form-control border-0">
  </div>
</div>
<div class="row input-block">
  <div class="border border-dark col-lg-7 ps-4">
    <input type="checkbox" data-target-name="OVD" class="check form-check-input" required>
    <h5 class="d-inline">C. Driving Licence</h5>
  </div>
  <div class="border border-dark col-lg-5">
    <input type="text" class="target-input form-control border-0">
  </div>
</div>
<div class="row input-block">
  <div class="border border-dark col-lg-7 ps-4">
    <input type="checkbox" data-target-name="OVD" class="check form-check-input" required>
    <h5 class="d-inline">D. NREGA Job Card</h5>
  </div>
  <div class="border border-dark col-lg-5">
    <input type="text" class="target-input form-control border-0">
  </div>
</div>
<div class="row input-block">
  <div class="border border-dark col-lg-7 ps-4">
    <input type="checkbox" data-target-name="OVD" class="check form-check-input" required>
    <h5 class="d-inline">E. National Population Register Letter</h5>
  </div>
  <div class="border border-dark col-lg-5">
    <input type="text" class="target-input form-control border-0">
  </div>
</div>
<div class="row input-block">
  <div class="border border-dark col-lg-7 ps-4">
    <input type="checkbox" data-target-name="OVD" class="check form-check-input" required>
    <h5 class="d-inline">F. Proof of Possession on Aadhaar</h5>
  </div>
  <div class="border border-dark col-lg-5">
    <input type="text" class="target-input form-control border-0">
  </div>
</div>
<div class="row input-block">
  <div class="border border-dark col-lg-7 ps-4">
    <input type="checkbox" data-target-name="cheese" class="check form-check-input" required>
    <h5 class="d-inline">Swiss</h5>
  </div>
  <div class="border border-dark col-lg-5">
    <input type="text" class="target-input form-control border-0">
  </div>
</div>
<div class="row input-block">
  <div class="border border-dark col-lg-7 ps-4">
    <input type="checkbox" data-target-name="cheese" class="check form-check-input" required>
    <h5 class="d-inline">Chedder</h5>
  </div>
  <div class="border border-dark col-lg-5">
    <input type="text" class="target-input form-control border-0">
  </div>
</div>
<div class="currently-active"></div>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72687728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档