【问题标题】:JavaScript Alert message not workingJavaScript 警报消息不起作用
【发布时间】:2018-05-04 20:37:32
【问题描述】:

下面是我汇总的代码,用于验证需要 9 个字段的表单中的 5 个字段。我创建了变量并将它们放入一个数组中。从那里我有一个函数循环遍历这个数组,如果该字段留空,则会弹出一个警报。

我遇到的问题是单击按钮时没有弹出警报。

var uName=document.getElementByName('userName');
var pword=document.gelElementByName('password');
var verify=document.getElementByName('passwordVerify');
var fName=document.getElementByName('firstName');
var lName=document.getElementByName('lastName');
var field=[uName,pword,verify,fName,lName];

function validateForm(form) {
  for(var i = 0; i < form.field.length; i++){
    if(form.field[i].value.length == 0){
       alert(form.field[i].name+' is required. Please populate');
       form.field[i].focus();
       return false;
    }
   } return true;
} 

不确定我做错了什么或导致错误的原因。非常感谢任何帮助。

【问题讨论】:

  • 没有getElementByNamegelElementByName 这样的东西。拼写很重要。如果要选择单个元素,最好使用querySelector
  • 请添加完整代码
  • 使用browser console (dev tools)(点击F12)并阅读任何错误。
  • 有 getElementsByName(复数),但 querySelector 可能更好,正如@CertainPerformace 提到的那样。MDN:developer.mozilla.org/en-US/docs/Web/API/Document/…

标签: javascript forms validation


【解决方案1】:

function validateForm() {
  var uName = document.getElementById('userName');
  var pword = document.getElementById('password');
  var verify = document.getElementById('passwordVerify');
  var fName = document.getElementById('firstName');
  var lName = document.getElementById('lastName');
  var field = [uName, pword, verify, fName, lName];

  for (var i = 0; i < field.length; i++) {
    if (!field[i].value) {
      alert(field[i].name + ' is required. Please populate');
      field[i].focus();
      return false;
    }
  }
  return true;
}
<form>
  <input type="text" id="userName" name="userName" /><br/>
  <input type="text" id="password" name="password" /><br/>
  <input type="text" id="passwordVerify" name="passwordVerify" /><br/>
  <input type="text" id="firstName" name="firstName" /><br/>
  <input type="text" id="lastName" name="lastName" /><br/>
  <button onclick="validateForm();">Submit</button>
</form>

现在,这是我所做的更改:

为简单起见,我在整个代码中将 getElementByName 更改为 getElementById; 我把函数的参数去掉了,把form.field改成field,因为……嗯,第一个就错了。

我还将迭代测试改为!field[i].value,相当于测试值是否有长度,但对我来说似乎更合适。

这就是我所做的一切,以及向表单元素添加 ID。


P.S:这是我在这里的第一个详细答案,非常感谢您的反馈! :)

【讨论】:

  • 这是一个完整的答案、解释和代码......为了更好,总是尝试(如果可能)将代码放在一个 sn-p 中以便于测试,使用 &lt;&gt; 按钮
  • @Calvin 你能详细说明一下吗?私人消息或其他任何对我来说可以的东西,但我真的没有这个 sn-p 功能的测试字段:)
  • 您知道在哪里编辑您的答案吗?如果是,请单击此处,您将看到带有按钮的工具栏,例如 B(粗体) I(斜体)等...有一个带有此符号的按钮:&lt;&gt;,单击它。它将打开一个窗口,您可以在其中添加 HTML、JS、CSS 分隔,您可以在其中附加代码。因此,每次单击“运行”时,甚至在将其附加到答案之后,都会执行此代码。
  • 非常感谢!我现在就这样做
  • 我尝试了该更新,然后我到达了弹出警报窗口的位置,但它什么也没显示。当我查看开发人员工具时,它返回以下消息: Uncaught TypeError: field[i].focus is not a function at reqField (formvalidate.js:15) 我是否应该将焦点设置在循环之外?抱歉,我是 JS 语言的新手。这和我熟悉的有点不同。
猜你喜欢
  • 2018-10-24
  • 1970-01-01
  • 2014-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-21
  • 1970-01-01
相关资源
最近更新 更多