Javascript 为什么可以';我不能检查我的复选框是否已被选中吗?

Javascript 为什么可以';我不能检查我的复选框是否已被选中吗?,javascript,dom,checkbox,Javascript,Dom,Checkbox,//为表单的“活动”部分注册。 document.querySelector(“.activities”).addEventListener(“更改”,函数(){ var main=document.querySelector(“全部”)。已选中; var framework=document.querySelector(“js frameworks”)。选中; var libs=document.querySelector(“js libs”)。已选中; var express=documen

//为表单的“活动”部分注册。
document.querySelector(“.activities”).addEventListener(“更改”,函数(){
var main=document.querySelector(“全部”)。已选中;
var framework=document.querySelector(“js frameworks”)。选中;
var libs=document.querySelector(“js libs”)。已选中;
var express=document.querySelector(“express”)。选中;
var节点=document.querySelector(“节点”)。已选中;
var build=document.querySelector(“构建工具”)。选中;
var npm=document.querySelector(“npm”)。已选中;
//如果用户选择了一个车间,则不允许在同一日期和时间选择车间——您应该禁用该复选框并直观地指示竞争时段中的车间不可用。
if(framework==true){
express.disabled=true;
}else if(express==true){
framework.disabled=true;
}else if(libs==true){
node.disabled=true;
}else if(node==true){
libs.disabled=true;
} 
//当用户取消选中某个活动时,请确保不再禁用竞争活动(如果有)。
如果(!framework.checked){
express.disabled=false;
}否则,如果(!express.checked){
framework.disabled=false;
}如果(!libs.checked),则为else{
node.disabled=false;
}如果(!node.checked),则为else{
libs.disabled=false;
} 
});

登记参加活动
主要会议-200美元
JavaScript框架研讨会-周二上午9点至下午12点,100美元
JavaScript库研讨会-周二下午1点到4点,100美元
快速工作坊-星期二上午9点至下午12点,100美元
Node.js研讨会-周二下午1点至4点,100美元
建造工具研讨会-星期三上午9点至下午12点,100美元
npm研讨会-周三下午1点至4点,100美元
因此,这行代码正在查找类型为
all
的DOM元素,而不是具有以下名称的元素:

document.querySelector("all")
相反,您可以使用找到的第一个:

document.getElementsByName("all")[0]
另一种选择是为元素分配一个id。

因此,这行代码正在查找类型为
all
的DOM元素,而不是具有此名称的元素:

document.querySelector("all")
相反,您可以使用找到的第一个:

document.getElementsByName("all")[0]

另一种选择是为元素分配一个id,并且。

我已经让它半工作了

我已将ID添加到我的HTML中:

<fieldset class="activities">
        <legend>Register for Activities</legend>
        <label><input type="checkbox" name="all" id="all"> Main Conference — $200</label>
        <label><input type="checkbox" name="js-frameworks" id="framework"> JavaScript Frameworks Workshop — Tuesday 9am-12pm, $100</label>
        <label><input type="checkbox" name="js-libs" id="libs"> JavaScript Libraries Workshop — Tuesday 1pm-4pm, $100</label>
        <label><input type="checkbox" name="express" id="express"> Express Workshop — Tuesday 9am-12pm, $100</label>
        <label><input type="checkbox" name="node" id="node"> Node.js Workshop — Tuesday 1pm-4pm, $100</label>          
        <label><input type="checkbox" name="build-tools" id="build"> Build tools Workshop — Wednesday 9am-12pm, $100</label>
        <label><input type="checkbox" name="npm" id="npm"> npm Workshop — Wednesday 1pm-4pm, $100</label>
      </fieldset>
这将在需要时成功禁用正确的复选框。但我无法在取消选中冲突框时启用它们


发生了什么事?我已经尝试过利用我的if条件,但到目前为止运气不好。

我已经让它半工作了

This is how is solve this issue:

//deactivate checkboxes if there is a conflict with scheduling 
$(function() {
    $('[name="js-frameworks"]').change(function() {
        if ($(this).is(':checked')) {
            $('[name="express"]').prop('disabled', true);
        } else if (!$(this).is(':checked')) {
            $('[name="express"]').prop('disabled', false);
        }
    })
});

$(function() {
    $('[name="express"]').change(function() {
        if ($(this).is(':checked')) {
            $('[name="js-frameworks"]').prop('disabled', true);
        } else if (!$(this).is(':checked')) {
            $('[name="js-frameworks"]').prop('disabled', false);
        }
    })
});

....
我已将ID添加到我的HTML中:

<fieldset class="activities">
        <legend>Register for Activities</legend>
        <label><input type="checkbox" name="all" id="all"> Main Conference — $200</label>
        <label><input type="checkbox" name="js-frameworks" id="framework"> JavaScript Frameworks Workshop — Tuesday 9am-12pm, $100</label>
        <label><input type="checkbox" name="js-libs" id="libs"> JavaScript Libraries Workshop — Tuesday 1pm-4pm, $100</label>
        <label><input type="checkbox" name="express" id="express"> Express Workshop — Tuesday 9am-12pm, $100</label>
        <label><input type="checkbox" name="node" id="node"> Node.js Workshop — Tuesday 1pm-4pm, $100</label>          
        <label><input type="checkbox" name="build-tools" id="build"> Build tools Workshop — Wednesday 9am-12pm, $100</label>
        <label><input type="checkbox" name="npm" id="npm"> npm Workshop — Wednesday 1pm-4pm, $100</label>
      </fieldset>
这将在需要时成功禁用正确的复选框。但我无法在取消选中冲突框时启用它们


发生了什么事?我尝试过使用if条件,但到目前为止运气不佳。

您知道
querySelector
的作用吗?我想我知道:返回文档中与指定选择器组匹配的第一个元素?嗯,您不知道。:)复选框的选择器都错了
document.querySelector(“[name=all]”)更像它。
querySelector
采用CSS/jQuery样式选择器,因此您需要
'[name=“all”]'
等CSS选择器。仔细阅读。你知道
querySelector
的作用吗?我以为我知道了:返回文档中与指定选择器组匹配的第一个元素?嗯,你不知道。:)复选框的选择器都错了
document.querySelector(“[name=all]”)更像它。
querySelector
采用CSS/jQuery样式选择器,因此您需要
'[name=“all”]'
等CSS选择器。请仔细阅读。有什么想法@TimoSta?有什么想法@TimoSta?谢谢!我在下面做了一个修正,并回答了我自己的问题,仍然有点困惑。谢谢!我在下面做了一个修改,并回答了我自己的问题,因为仍然有点困惑。如果你能用几句话来解释这段代码是如何工作的,那就更好了。谢谢。如果你能用几句话来解释这段代码是如何工作的,那就更好了。非常感谢。
This is how is solve this issue:

//deactivate checkboxes if there is a conflict with scheduling 
$(function() {
    $('[name="js-frameworks"]').change(function() {
        if ($(this).is(':checked')) {
            $('[name="express"]').prop('disabled', true);
        } else if (!$(this).is(':checked')) {
            $('[name="express"]').prop('disabled', false);
        }
    })
});

$(function() {
    $('[name="express"]').change(function() {
        if ($(this).is(':checked')) {
            $('[name="js-frameworks"]').prop('disabled', true);
        } else if (!$(this).is(':checked')) {
            $('[name="js-frameworks"]').prop('disabled', false);
        }
    })
});

....