我正在做一个表单,我只从一组复选框中选择一个复选框。我想使输入字段需要其相应的复选框被选中。
在这里,我只能选择一个复选框并使其相应的文本字段成为必需的。我想,如果我选择第n复选框,那么第n输入字段将强制填写。
$(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)
});
});<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>
发布于 2022-06-20 14:18:08
DOM遍历通常比操作名称更简单。在这里,我们可以找到同一行中的第一个文本输入。
$(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)
});
});[type="text"][required] {
background: pink !important;
}<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>
发布于 2022-06-20 14:33:47
类似于伊舍伍德的回答--当我把它粘贴进去时,我有几乎相同的代码,但他更快。
然而,我会做一些不同的事情:当您第一次检测到单击复选框时,取消选中所有其他复选框(使复选框像单选按钮一样工作),还可以伪造相关输入字段的所有required属性--这允许用户改变主意并选择不同的复选框。
如果您给每个“相关联的输入字段”提供一个特殊的类(如.chkAssoc ),则此任务的代码会更简单一些。
$(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发布于 2022-06-20 15:55:05
为了说明我的观点,这比严格需要的要详细一些。
id="OVD"
F 214。
$(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" : "";
});
});.input-block[data-active-block="active"] {
background-color: #ddffdd;
}<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>
https://stackoverflow.com/questions/72687728
复制相似问题