使用Javascript禁用特定复选框
我想请求有关如何禁用特定复选框的帮助 情景:使用Javascript禁用特定复选框,javascript,html,jquery,Javascript,Html,Jquery,我想请求有关如何禁用特定复选框的帮助 情景: 如果我单击“全部是”复选框,则其他复选框将被禁用(第一季度至第四季度) 如果我在第一季度至第四季度复选框中选择了一个或多个复选框-“全部是”复选框将被禁用 代码: $('input[type=checkbox]')。更改(函数(){ 如果($(this).is(':checked')){ $('input[type=checkbox]').attr('disabled',true); $(this.attr('disabled',''); }否则{
$('input[type=checkbox]')。更改(函数(){
如果($(this).is(':checked')){
$('input[type=checkbox]').attr('disabled',true);
$(this.attr('disabled','');
}否则{
$('input[type=checkbox]').attr('disabled','';
}
});代码>
Q1
问题2
第三季度
第四季度
对所有人都是
你可以这样做
Q1
问题2
第三季度
第四季度
对所有人都是
美元(“.q1_q4”)。关于('change',function(){
美元(“.yta”).attr(“禁用”、“禁用”);
});
$(“.yta”).on('change',function(){
美元(“.q1_q4”).attr(“禁用”、“禁用”);
});
查看完美答案。
$('input[type=checkbox]')。更改(函数(){
if($(this).is('input[name=“QYTA”]')){
如果($(this).is(':checked')){
$('input[type=checkbox][name!=“QYTA”]').attr('disabled',true);
}否则{
$('input[type=checkbox][name!=“QYTA”]').attr('disabled',false);
}
}否则{
如果($(this).is(':checked')){
$('input[type=checkbox][name=“QYTA”]').attr('disabled',true);
}else if($('input[type=checkbox][name!=“QYTA”]:checked')。长度==0){
$('input[type=checkbox][name=“QYTA”]').attr('disabled',false);
}
};
});代码>
Q1
问题2
第三季度
第四季度
所有选项均为“是”
您需要检查复选框是否按照您的要求选中,
条件1:如果所选问题长度大于1,则禁用YTA
条件2:如果选择了YTA,则禁用所有问题
如果还需要什么,请告诉我。
$('.yta').change(函数(){
if($('.yta:选中').length){
$('.q').attr('disabled',true);
}否则{
$('.q').removeAttr(“禁用”);
}
});
$('.q').change(函数(){
if($('.q:选中').length){
$('.yta').attr('disabled',true);
}否则{
$('.yta').removeAttr(“禁用”);
}
});代码>
Q1
问题2
第三季度
第四季度
所有属性都是
您可以使用jQuery中的.prop
函数轻松添加和删除禁用的属性。如果在同一页上使用其他复选框,则需要优化选择器
$('input[type=checkbox]')。更改(函数(){
if(this.name==“QYTA”&&this.checked){
$('input[type=checkbox][name!=“QYTA”]').prop(“disabled”,true);
}else if(this.name!=“QYTA”&&this.checked){
$('input[type=checkbox][name=“QYTA”]').prop(“disabled”,true);
}否则{
$('input[type=checkbox]').prop(“disabled”,false);
}
});代码>
Q1
问题2
第三季度
第四季度
对所有人都是
我的哲学回答:
- 尽可能避免jQuery
- 使用做一件事的小函数
- 请记住,在文档中多次使用时,同样的方法也应该有效
- 防止代码中出现神奇的值
- 尽可能地封装
这看起来有点过分,但这是有效的
{
函数检查答案(QName、allName){
const qSelector=qNames.map(e=>`[name=“${e}]”)。join(','))
const allSelector=`[name=“${allName}”]`
常量选择器=`${qSelector},${allSelector}`;
const getValue=()=>Array.from(document.querySelectorAll(selector)).filter(e=>e.checked.map(e=>({[e.name]:e.value}))
const checkQ=value=>value.map(e=>Object.keys(e)[0]).filter(value=>qNames.includes(value)).length>0;
const checkAll=value=>value.map(e=>Object.keys(e)[0])。包括(allName)
const qDisable=()=>Array.from(document.querySelectorAll(qSelector)).forEach(e=>e.disabled=true)
const qEnable=()=>Array.from(document.querySelectorAll(qSelector)).forEach(e=>e.disabled=false)
const allDisable=()=>document.querySelector(allSelector).disabled=true
constallenable=()=>document.querySelector(allSelector).disabled=false
返回e=>{
如果(!e.target.closest(选择器)){return}
const value=getValue();
如果(检查Q(值)){
allDisable();
}else if(选中全部(值)){
qDisable()
}否则{
allEnable();
qEnable();
}
}
}
设qNames=['QA1','QA2','QA3','QA4']
让allName='QAYTA'
document.addEventListener('change',checkAnswers(QName,allName))
qNames=['QB1'、'QB2'、'QB3'、'QB4']
allName='QBYTA'
document.addEventListener('change',checkAnswers(QName,allName))
}
:禁用+标签{
颜色:浅灰色;
}
问题1
问题2
问题3
问题4
对所有人都是
问题1
问题2
问题3
问题4
对所有
都是,我的解决方案是为每个复选框设置onchange
事件处理程序
然后根据触发onchange
事件的元素执行不同的操作
如果QYTA
触发onchange
,则禁用Q1
至Q4
复选框。
其他的
禁用QYTA
复选框
我利用了checked
和disabled
属性之间的逻辑差异
以下是我的解决方案:
$(“输入[type='checkbox'])。每个(函数(){
$(this).on('change',function()){
if(this.name=='QYTA'){
我希望能帮助你
$(“输入[type='checkbox'])。每个(函数(){
$(此)。在('单击',函数()上){
var el=$(“输入[type='checkbox']”)。而不是($(“输入[name='QYTA']”);
var elAl=$(“输入[name='QYTA']”);
if($(this).not(elAl).length==0){
如果(elAl.is(':checked')){
el.attr(“禁用”,真实);
}否则{
$(“输入[type='checkbox']);