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);
}
})
});
....