[英]getElementById check multiple conditions
我试图建立一个函数,检查是否所有字段都已填充,如果已填充,则显示div(如果未隐藏)。
我可以使它在一个领域上工作,但是我然后尝试了两种检查多重性的方法。
首先,如果满足第一个条件,然后运行其他条件,则检查嵌套在第一个条件内的第二个字段...这不起作用。
我第二次传入了一个ID数组,而不是一个ID ...这也不起作用。
我剩下一个工作功能,该功能只有在填充了第一个文件时才能起作用,任何人都可以想到解决方案,或者我可能错误地将数组传递了给我。
我的密码
var myVar = setInterval(myTimer, 10);
function myTimer() {
if(!document.getElementById('Email').value) { // I need this to pass if multiple id's
var divsToHide = document.getElementsByClassName("somediv"); //divsToHide is an array
for(var i = 0; i < divsToHide.length; i++){
divsToHide[i].style.visibility = "hidden"; // or
divsToHide[i].style.display = "none"; // depending on what you're doing
}
}
else {
var divsToHide = document.getElementsByClassName("somediv"); //divsToHide is an array
for(var i = 0; i < divsToHide.length; i++){
divsToHide[i].style.visibility = "visible"; // or
divsToHide[i].style.display = "block"; // depending on what you're doing
}
}
}
做到这一点,以便您的函数接受元素ID和需要检查的类Name的参数。
另外,切勿使用.getElementsByClassName()
( 为什么请阅读此处 )。 而是使用.querySelectorAll()
。
而且,您可以使用数组和节点列表的现代.forEach()
API(尽管不是在IE中),它比使用索引管理传统的for
循环更简单。
最后,使用预制的CSS类代替内联样式。
// You just need to pass the ID and Class to the following line var myVar = setInterval(function(){ myTimer([id here],[class here]) }, 10); function myTimer(id, class) { // Set up these references just once and the rest of the code // will be easier to read var elem = document.getElementById(id); var divsToHide = document.querySelectorAll("." + class); // Instead of negative logic, reverse the if branches if(elem.value) { divsToHide.forEach(function(){ this.classList.remove("hidden"); // Much simpler than inline styling }); } else { divsToHide.forEach(function(){ this.classList.add("hidden"); }); }
/* Use pre-made CSS classes instead of inline styling */ .hidden { display:none; }
如果您有ID的数组,例如
let idArray = ['foo', 'bar', 'baz']
您可以使用for
循环遍历数组
for (i = 0; i > idArray.length; i++) {
if (!document.getElementById(idArray[i]).value) {
// your hide logic
} else {
// your show logic
}
}
您可以为所有需要验证的元素创建一个const。 例如,
const elementIdsToBeValidated = ['name', 'email'];
您还可以创建验证器函数,该函数根据输入返回true和false,
const nameValidator = (val) => !!val;
const emailValidator = (email) => !!email;
const validators = [nameValidator, emailValidator];
然后,您可以运行计时器功能,
var myVar = setInterval(myTimer(['name', 'email']), 10);
function myTimer(ids) {
ids.forEach(id => {
const el = document.getElementById(id);
const val = el.value;
const divEl = document.getElementById('error');
const valid = validators.reduce((acc, validator) => validator(val), false);
if(valid) {
divEl.style.display = 'none';
} else {
divEl.style.display = 'block';
}
});
}
您可以查看以下stackBlitz示例, https: //stackblitz.com/edit/js-ie7ljf
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.