我有一个带有几个复选框的表单,每个复选框下面都有一组单选按钮。我想在未选中或取消选中相应的复选框时禁用和重置单选按钮。
我尝试使用jquery选择器:radio[name=vid]
启用单选按钮,但它不起作用。
<form action='matrix.php' method='post' id='formanal' name='formanal'>
<ul class="desc">
<li><label><input type="checkbox" id ="1" value="Couleur des tarses" name="1">Couleur des tarses</label></li>
<ul>
<li class="valeur"><label><input type="radio" value="1-1" id="1-1" name="v1" disabled>Jaunes</label></li>
<li class="valeur"><label><input type="radio" value="1-2" id="1-2" name="v1" disabled>Blancs</label></li>
</ul>
</ul>
...
<ul class="desc">
<li><label><input type="checkbox" id ="8" value="Forme des ailes" name="8">Forme des ailes</label></li>
<ul>
<li class="valeur"><label><input type="radio" value="8-15" id="8-15" name="v8" disabled>Pliées en long</label></li>
<li class="valeur"><label><input type="radio" value="8-16" id="8-16" name="v8" disabled>Étalées en toit</label></li>
</ul>
</ul>
<input type='submit' name='action' value='Valider'></div>
</form>
$(document).ready(function() {
$("form input:checkbox").change(function() {
var vid = 'v' + this.id;
var etat = $(this).prop('checked');
if (etat) {
$(':radio[name=vid]').prop('disabled', false);
} else {
$(':radio[name=vid]').prop('checked', false);
$(':radio[name=vid]').prop('disabled', true);
}
});
});
创建时禁用单选按钮,但单击相应的复选框不会启用它们。提前感谢任何线索。
你的问题在于连接,你必须在你的选择器中添加变量vid,在javascript中,连接运算符是+
你的代码必须是这样的:
$(document).ready(function() {
$("form input:checkbox").change(function() {
var vid = 'v' + this.id;
var etat = $(this).prop('checked');
if (etat) {
$(':radio[name='+vid+']').prop('disabled', false);
} else {
$(':radio[name='+vid+']').prop('checked', false);
$(':radio[name='+vid+']').prop('disabled', true);
}
});
});
我希望它对你有所帮助
在JQuery中,您需要从<ul>
的父checkbox
获取radiobuttons,如下所示:$(this).closest('ul').find("input[type='radio']")
$(function () {
$("form input[type='checkbox']").change(function() {
if ($(this).is(":checked")){
$(this).closest('ul').find("input[type='radio']").prop('disabled', false);
}
else {
$(this).closest('ul').find("input[type='radio']").prop('disabled', true);
$(this).closest('ul').find("input[type='radio']").prop('checked', false);
}
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form action='matrix.php' method='post' id='formanal' name='formanal'>
<ul class="desc">
<li><label><input type="checkbox" id ="1" value="Couleur des tarses" name="1"> Couleur des tarses</label></li>
<ul>
<li class="valeur"><label><input type="radio" value="1-1" id="1-1" name="v1" disabled> Jaunes</label></li>
<li class="valeur"><label><input type="radio" value="1-2" id="1-2" name="v1" disabled> Blancs</label></li>
</ul>
</ul>
<ul class="desc">
<li><label><input type="checkbox" id ="8" value="Forme des ailes" name="8"> Forme des ailes</label></li>
<ul>
<li class="valeur"><label><input type="radio" value="8-15" id="8-15" name="v8" disabled> Pliées en long</label></li>
<li class="valeur"><label><input type="radio" value="8-16" id="8-16" name="v8" disabled> Étalées en toit</label></li>
</ul>
</ul>
</form>
我会做这样的事情。你甚至不需要jQuery ......
var checkbox1 = document.getElementById("1");
var option1 = document.getElementById("1-1");
var option2 = document.getElementById("1-2");
changeDisabledState = () => {
if (checkbox1.checked == true) {
option1.disabled = false;
option2.disabled = false;
} else {
option1.disabled = true;
option2.disabled = true;
option1.checked = false;
option2.checked = false;
}
};
checkbox1.addEventListener("click", changeDisabledState);