html - Tabindex 不适用于自定义单选按钮
问题描述
我创建了一个自定义单选按钮。我的问题tabindex
。当我按下选项卡时,它没有选择单选按钮。我在Labelname1
.
我该如何解决这个问题?
$('input[name="tod-app"]').click(function() {
if ($('#todNO').is(':checked')) {
$('.is_hide').show();
} else {
$('.is_hide').hide();
}
});
[type="radio"]:checked,
[type="radio"]:not(:checked) {
position: absolute;
left: -9999px;
}
[type="radio"]:checked+label,
[type="radio"]:not(:checked)+label {
position: relative;
padding-left: 28px;
cursor: pointer;
line-height: 20px;
display: inline-block;
color: #2a2e3e;
}
[type="radio"]:not(:checked)+label:before {
border: 2px solid #ccc;
}
[type="radio"]:checked+label:before {
border: 2px solid #5E1DD6;
}
[type="radio"]:checked+label:before,
[type="radio"]:not(:checked)+label:before {
content: '';
position: absolute;
left: 0;
top: 0;
width: 22px;
height: 22px;
border-radius: 100%;
background: #fff;
}
[type="radio"]:checked+label:after,
[type="radio"]:not(:checked)+label:after {
content: '';
width: 10px;
height: 10px;
background: #5E1DD6;
position: absolute;
top: 6px;
left: 6px;
border-radius: 100%;
-webkit-transition: all 0.2s ease;
transition: all 0.2s ease;
}
[type="radio"]:not(:checked)+label:after {
opacity: 0;
-webkit-transform: scale(0);
transform: scale(0);
}
[type="radio"]:checked+label:after {
opacity: 1;
-webkit-transform: scale(1);
transform: scale(1);
}
.is_hide {
display: none;
}
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<div class="row">
<div class="col-xxl-4 col-xl-4 col-lg-4 col-md-12 col-sm-12 col-xs-12">
<div class="form-group mb-4">
<label for="" class="form-label">City</label>
<select name="city" class="form-select" tabindex="1">
<option value="" selected="" disabled="">Select city</option>
<option value="">xyz</option>
</select>
</div>
</div>
<div class="col-xxl-4 col-xl-4 col-lg-4 col-md-12 col-sm-12 col-xs-12">
<div class="form-group text-center position-relative todWrap">
<label for="" class="form-label">Labelname1
</label>
<div class="d-flex justify-content-center todWrapRadio">
<div class="form-check ps-0">
<input type="radio" id="todYES" class="radio-custom" name="tod-app" value="1" tabindex="2">
<label for="todYES" class="radio-custom-label">Yes</label>
</div>
<div class="form-check">
<input type="radio" id="todNO" class="radio-custom" name="tod-app" value="0">
<label for="todNO" class="radio-custom-label">No</label>
</div>
</div>
</div>
</div>
<div class="col-xxl-4 col-xl-4 col-lg-4 col-md-12 col-sm-12 col-xs-12">
<div class="form-group is_hide">
<label for="" class="form-label">This field is hidden and enable when choose NO from Lablename1 </label>
<div class="d-flex">
<div class="form-check ps-0">
<input type="radio" id="lYES" class="radio-custom" name="limit" value="1">
<label for="lYES" class="radio-custom-label">Yes</label>
</div>
<div class="form-check">
<input type="radio" id="lno" class="radio-custom" name="limit" value="0">
<label for="lno" class="radio-custom-label">No</label>
</div>
</div>
</div>
</div>
<div class="col-xxl-4 col-xl-4 col-lg-4 col-md-12 col-sm-12 col-xs-12">
<div class="form-group position-relative">
<label for="" class="form-label">Labelname2
</label>
<div class="d-flex" id="grossErrorshow">
<input type="text" class="form-control input-border-radiusR0 border-end-0" aria-label="Text input with dropdown button" name="gross-1" tabindex="3">
<div class="custom-dropdown">
<select class="form-select input-border-radiusL0" aria-label="Default select example" name="roadunit" tabindex="4">
<option value="mt">Sqr Mtr</option>
<option value="sf">Sqr Fts</option>
</select>
</div>
</div>
</div>
</div>
<div class="col-xxl-4 col-xl-4 col-lg-4 col-md-12 col-sm-12 col-xs-12">
<div class="form-group mb-4 position-relative">
<label for="" class="form-label">Labelname3
</label>
<div class="d-flex" id="roadWideningErrorshow">
<input type="text" class="form-control input-border-radiusR0 border-end-0" aria-label="Text input with dropdown button" name="road1" tabindex="5">
<div class="custom-dropdown">
<select class="form-select input-border-radiusL0" aria-label="Default select example" name="roadWidenUnit" tabindex="6">
<option value="mt">Sqr Mtr</option>
<option value="sf">Sqr Fts</option>
</select>
</div>
</div>
</div>
</div>
<div class="col-xxl-4 col-xl-4 col-lg-4 col-md-12 col-sm-12 col-xs-12">
<div class="form-group">
<label for="" class="form-label">Labelname4</label>
<select class="form-select" aria-label="Default select example" name="width-access" tabindex="7">
<option selected="" disabled="">Select access</option>
<option value="0-9">
< 9 Mtr</option>
<option value="9-12">9 to 12 mt</option>
<option value="12-15">12 to 15 mt</option>
<option value="15-18">15 to 18 mt</option>
<option value="18-24">18 to 24 mt</option>
<option value="24-30">24 to 30 mt</option>
<option value="30-0">> 30 mt</option>
</select>
</div>
</div>
<div class="col-xxl-4 col-xl-4 col-lg-4 col-md-12 col-sm-12 col-xs-12">
<div class="form-group customrange position-relative">
<div class="d-flex justify-content-between">
<label>Labelname5
</label>
<div class="loadinrangevalue"><input type="text" name="loading" value="0" max="100" tabindex="8">%</div>
</div>
<input type="range" class="form-range customRange" value="0" min="0" max="100">
<div class="d-flex justify-content-between">
<span>0</span>
<span>100</span>
</div>
</div>
</div>
<div class="col-xxl-12 col-xl-12 col-lg-12 col-md-12 col-sm-12 col-xs-12">
<div class="form-group">
<input type="checkbox" id="aggred" name="iaggred" value="1" tabindex="9"> I agree to the <a href="">terms and condition</a>
<div class="iaggrederror"></div>
</div>
<div class="pt-3 pb-3">
<input type="submit" name="submit" value="Calculate" class="btn themeBg btn-black" tabindex="10">
</div>
</div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
解决方案
问题是您使用绝对位置将“真实”输入定位在视口之外。因此,tabindex 输入单选实际上正在工作,但仅适用于“输入”,而不适用于“标签”标签。
我建议将 tabindex 设置为“标签”标签而不是输入:
<div class="form-check ps-0">
<input type="radio" id="todYES" class="radio-custom" name="tod-app" value="1">
<label for="todYES" class="radio-custom-label" tabindex="2">Yes</label>
</div>
并为输入 + 标签焦点元素添加自定义 CSS:
[type="radio"]:focus + label {
border-color: #86b7fe;
outline: 0;
box-shadow: 0 0 0 .25rem rgba(13,110,253,.25);
border-radius: 1rem;
}
如果您只想选择单选按钮:
[type="radio"]:focus + label:before {
border-color: #86b7fe;
outline: 0;
box-shadow: 0 0 0 .25rem rgba(13,110,253,.25);
border-radius: 1rem;
}
推荐阅读
- flutter - 选择一个文件并使用 Flutter Web 通过 POST 发送
- vb.net - VB .NET 改变按钮的颜色
- css - 角度 css 操作或位置更改
- java - 编写一个程序,返回一个新数组,该数组包含所有大于java数组中第一个值的值
- javascript - 在 Firestore Web 中检索图像参考的 Javascript 函数有问题
- javascript - React - 我有六个文件导出一个变量,并希望从一个文件中导出所有变量
- python - 如何使用自定义函数和 .apply 替换 pandas 数据框中的多个值
- random - 不运行一行代码占总时间的 5%
- microsoft-graph-api - 是否有用于检索 Microsoft Teams PSTN 和 SMS 使用情况的 MS-Graph API 端点?
- arrays - 如何访问这个多维 json 数组中的数据?