【问题标题】:Validating Form with Javascript (Simple Test)使用 Javascript 验证表单(简单测试)
【发布时间】:2014-06-08 17:00:02
【问题描述】:
var name = document.getElementById('contact-name'),
    email = document.getElementById('contact-email'),
    phone = document.getElementById('contact-phone'),
    message = document.getElementById('contact-message');


function checkForm() {
  if (name.value == '') {
    alert('test');
  }

}

在开始学习实际的客户端验证之前,我只是想确保一切正常。

这里是 HTML

   <form role='form' name='contactForm' action='#' method="POST" id='contact-form'>

          <div class="form-group">
            <label for="contact-name">First and Last Name</label>
            <input type="text" class="form-control" id="contact-name" name="contactName" placeholder="Enter your name.." pattern="[A-Za-z]+\s[A-Za-z]+">
          </div>

          <div class="form-group">
            <label for="contact-email">Email address</label>
            <input type="email" class="form-control" id="contactEmail" name="contactEmail" placeholder="Enter Email" required>
          </div>

          <div class="form-group">
            <label for="contact-phone">Phone Number</label>
            <input type="number" class="form-control" id="contactPhone" name="contactPhone" placeholder="Enter Phone Number"  required'>
          </div>   

          <div class="form-group">
            <label for='contactMessage'>Your Message</label>
            <textarea class="form-control" rows="5" placeholder="Enter a brief message" name='contactMessage' id='contact-message' required></textarea>
          </div>

        <input type="submit" class="btn btn-default" value='Submit' onclick='checkForm()'>
      </fieldset>
      </form>

我取消了必需的属性,如果我将名称字段留空,当我单击提交时它会直接转到另一个。为了检查 javascript 是否正常工作,我做了一个基本的 onclick 函数。

也许有人可以向我解释 checkForm 函数有什么问题。提前致谢。

P.S form-group 和 form-control 类属于 bootstrap

【问题讨论】:

  • 您是否收到来自checkForm() 的任何错误?如果是这样,哪些错误?可能是您试图在元素实际存在之前检索它们。
  • 您的代码在&lt;head&gt; 中吗?如果是,你必须等到 DOM 准备好,或者你可以将你的脚本标签放在 &lt;body&gt; 的末尾。
  • 据我所知没有错误。我的脚本标签都在结束正文标签之前。
  • 您能否详细说明您的解决方案?你想达到什么目的,你的应用程序的什么行为阻止你这样做?你如何使用checkForm() 函数?我没有看到任何调用。
  • 我编辑了 HTML 以显示整个表单。我将 onclick 放在提交按钮上,我只是想在学习完全验证表单之前让一切正常。当我将名称字段留空时,警报('test')不显示

标签: javascript forms validation


【解决方案1】:

将您的 javascript 更改为:

   var contactName = document.getElementById('contact-name'),
       email = document.getElementById('contact-email'),
       phone = document.getElementById('contact-phone'),
       message = document.getElementById('contact-message');


    function checkForm() {
      if (contactName.value === '') {
        alert('test');
      }

    }

【讨论】:

  • 这不会阻止字体提交并且根本不起作用。相反,当用户填写名称字段并单击提交按钮时,会弹出错误消息。
  • @necka7 我同意第 2 点和第 3 点。但是该值是在 checkForm 函数中检索的。所以该值将是当前值。
  • 表单仍将提交。但是,如果填写了联系人姓名,则不会弹出错误。
  • 函数内没有看到检索命令,能否详细说明?
  • 检索的是元素而不是值。检索值 (contactName.value) 时,该属性将包含当前值,而不是加载的值。
【解决方案2】:

好的,霍布斯,感谢您编辑您的问题,现在我可以理解您的问题了。 您的代码面临三个两个问题。

  1. 您的控制流。如果要验证字段,则必须在验证时获取其值。您改为在页面加载时填充变量名称,但用户只会在此之后输入文本。因此,您需要将 var someVariableName = document.getElementById(...); 添加到 checkForm() 函数的开头。
  2. 全局变量。请不要这样使用它们,尽可能避免使用全局变量是一个很好的设计,否则你会给自己带来引入副作用的危险(或遭受它们的影响,这发生在你的情况下)。全局上下文窗口已经包含一个变量name,您不能覆盖它。在您的控制台中查看window.name。您当然可以在函数或块中使用var name = ...
  3. 即使您解决了上述问题,您仍然会提交表单。如果您以return false; 结束您的checkForm() 函数,您可以阻止表单提交

为清楚起见,我附加了应该为您工作的部分 javascript:

function checkForm() {
  var name = document.getElementById('contact-name');   
  if (name.value == '') {
    alert('test');
    return false;
  }
}

编辑:正如 Eman Z 指出的那样,问题的第 1 部分并没有真正阻止代码工作,因为正在检索对象的地址(感谢 Eman Z!),

【讨论】:

  • 感谢您的回复,但仍然无法正常工作。 jsfiddle.net/5E6cs/4
  • 当然,我太傻了!将onsubmit='checkForm()' 更改为onsubmit='return checkForm()'
  • 嗯,似乎仍然不适合我。你能给我一个jsfiddle吗?
  • jsfiddle.net/vL2tL 在这里,但它显示带有错误消息的 json,我猜这是因为表单。您是否尝试将代码放在源文件中?如果是这样,行为是什么?
  • 嗯,好吧,所以我将代码放在表单上方的脚本标签中,它起作用了...在将名称字段留空后收到警报消息。我不明白为什么
猜你喜欢
  • 2012-12-04
  • 1970-01-01
  • 2019-12-18
  • 1970-01-01
  • 1970-01-01
  • 2013-04-14
  • 2016-03-19
  • 2016-05-05
相关资源
最近更新 更多