繁体   English   中英

getElementById检查多个条件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM