Javascript 使用if语句时无法获取正确显示的警报

Javascript 使用if语句时无法获取正确显示的警报,javascript,Javascript,在上周收到的帮助下,我能够获得此代码的不同版本。我正在学习,所以这次我决定使用for循环对其进行重构以遍历数组。在我添加一个“else”来提醒用户他们输入了错误的数据之前,这本身似乎工作正常 我看到在for循环中,它会循环它的迭代次数,但无论我将警报放在哪里,它似乎都会覆盖所有内容。无论输入什么,它都会首先弹出,然后您必须单击它5次,然后它才会显示阵列中的数据。 我对其他方法持开放态度,而不是只使用警报 我试着编写一个这样的函数,这样我就可以移动调用来测试: function inVal

在上周收到的帮助下,我能够获得此代码的不同版本。我正在学习,所以这次我决定使用for循环对其进行重构以遍历数组。在我添加一个“else”来提醒用户他们输入了错误的数据之前,这本身似乎工作正常

我看到在for循环中,它会循环它的迭代次数,但无论我将警报放在哪里,它似乎都会覆盖所有内容。无论输入什么,它都会首先弹出,然后您必须单击它5次,然后它才会显示阵列中的数据。 我对其他方法持开放态度,而不是只使用警报

我试着编写一个这样的函数,这样我就可以移动调用来测试:

    function inValidAlert(){
     let cylFindInvalid = 
     document.getElementById("cylEnter").value.toUpperCase();
     if(cylFindInvalid != cylArray.name){
        let displayIt = document.getElementById("displayCyl");
        displayIt.innerHTML = displayIt.innerHTML + "Enter a valid 
        cylinder type";
      }
    }
我将invalidAlert()放在ListCyclares函数内部,函数外部,等等…这给了我与编写警报相同的结果,但还是给了我一些练习

对于你们中的一些人来说,这似乎是一个不需要动脑筋的问题,但我正在学习Javascript,需要帮助来解决这个问题:)

显示的代码在没有alert语句的情况下工作。因此,用户在数组中输入一个具有“name”属性的圆柱体类型。LD、RD、GD等。。。 如果有效,则对象(数组中)中的数据将显示在屏幕上。 但是,如果看到无效条目,我希望弹出一个警告,显示“无效数据”或类似内容。弹出窗口将工作,但在错误的时间或多次点击清除它,如果在for循环内。如果使用“break”,则警报将覆盖整个If语句,并且无论输入什么都将触发

那么,我该如何让警报正常启动呢?也许for循环一开始就是错误的整体方法?如果我也需要发布我的HTML,请告诉我。我是新来的,正在努力学习这里的诀窍,请对我放松点

函数列表(){
let display=document.getElementById(“displayCyl”);
对于(var i=0;i“+cylArray[i]。品牌+
“
”+cylArray[i]。圆柱体+”
“+cylArray[i]。管脚+”
“+cylArray[i]。键入; }否则{ 警报(“输入有效的气缸类型”); } } } //用于在按钮使用一次后禁用该按钮的功能。 const setbutton=document.getElementById('button1'); setbutton.addEventListener('单击',禁用按钮); 函数disableButton(){ setbutton.disabled=true; } //函数,该函数将在单击时清除窗体和显示。 函数clearCyl(){ var cylDisplay=document.getElementById(“displayCyl”); document.getElementById(“cylForm”).reset(); cylDisplay.innerHTML=“”; setbutton.disabled=false; } //圆柱体类型属性显示为阵列内的单个对象。 变量数组=[{ 姓名:‘LD’, 品牌:“施拉格,猎鹰”, 圆柱体:“无圆柱体”, 引脚:“6引脚”, 类型:'KIL' }, { 名称:“RD”, 品牌:'Schlage Everest 29 S123(标准)', 圆柱体:“带圆柱体”, 引脚:“6引脚”, 类型:“FSIC” }, { 姓名:'PD', 品牌:'Schlage Everest 29 S123(标准)', 圆柱体:“带圆柱体”, 引脚:“6引脚”, 类型:'KIL' }, { 名称:“JD”, 品牌:“Schlage”, 圆柱体:“无圆柱体”, 引脚:“6引脚”, 类型:“FSIC” }, { 名称:‘GD’, 品牌:“Schlage Everest 29 R系列键槽”, 圆柱体:“带圆柱体”, 引脚:“7引脚”, 类型:“SFIC” }
];在您的循环中,逻辑上它将始终至少发出5次警报。这是因为
cylCompare
从不更改,因此它永远不会等于循环数组中的其他5.name属性。因此,
cyccompare==cylArray[i]。name
只能在六次迭代中的一次中为真。因此,警报将连续显示5次

相反,您要做的是,如果用户输入从未与数组中的单个项匹配,那么您将希望说它无效。您可以先假设它无效,然后在找到任何匹配项后将其更改为有效:

function listCylinders() {
  let display = document.getElementById("displayCyl");
  let valid = false; // We assume this isn't valid
  // You can move this outside of the loop, and trim in case the user entered spaces
  let cylCompare = document.getElementById("cylEnter").value.toUpperCase().trim();
  for (var i = 0; i < cylArray.length; i++) {
    if (cylCompare == cylArray[i].name) {
      valid = true; // We find a match in one of our array items, so it's valid
      display.innerHTML = display.innerHTML + cylArray[i].name + ":" + "<br>" + cylArray[i].brand +
        "<br>" + cylArray[i].cylinder + "<br>" + cylArray[i].pins + "<br>" + cylArray[i].type;
    }
  }
  if(!valid) alert("Enter a valid cylinder type"); // If we never found a match then we alert
}
函数列表(){
let display=document.getElementById(“displayCyl”);
设valid=false;//我们假设这是无效的
//您可以将其移动到循环外部,并在用户输入空格时进行修剪
让cyCompare=document.getElementById(“cyCenter”).value.toUpperCase().trim();
对于(var i=0;i“+cylArray[i]。品牌+
“
”+cylArray[i]。圆柱体+”
“+cylArray[i]。管脚+”
“+cylArray[i]。键入; } } if(!valid)alert(“输入有效的圆柱体类型”);//如果我们从未找到匹配项,那么我们将发出警报 }
太棒了,谢谢Spencer!这很有道理,我理解。非常感谢你的帮助。