当前位置: 首页 > 知识库问答 >
问题:

表单验证不显示消息

亢保赫
2023-03-14

我试图让我的javascript验证电话号码输入,并在用户输入信息不正确时显示消息。我还设置了另外两个输入,所以我复制了其中一个,并用phoneNumber替换了名称,但没有结果。没有HTML的替代品,请它是我必须使用我的评估。

这里我只包含了电话号码输入的代码。http://jsfiddle.net/29ZNV/

超文本标记语言

    <form>
        <label for="phoneNumber"><span class="textStyle">Phone Number*</span>
        <input type="text" id="phoneNumber"><br>
        <span id="phoneMessage" class="message">You must have a valid phone number</span>
         </label>
<input type="submit" id="submit" value="Submit"/>
</form>

JAVASCRIPT

var phoneInput = document.querySelector ('#phoneNumber');
var submitButton = document.querySelector('#submit');

function displayError(fieldname, message) {
    var input_field = document.querySelector('#' + fieldname);
    var error_box = document.querySelector('#' + fieldname + 'Message');

    addClass (input_field, 'error');
    error_box.style.display = 'block';

    error_box.innerHTML = message;
}

function hideError(fieldname){
    var input_field = document.querySelector('#'+fieldname);
    var error_box = document.querySelector('#'+fieldname+'Message');
    removeClass (input_field, 'error');
    error_box.style.display = 'none';
}

function addClass(html_element,class_str) {
    if(html_element.className.indexOf(class_str) == -1){
        html_element.className += ' '+class_str;
    }
}

function removeClass(html_element, class_str){
    if(html_element.className.indexOf(class_str) != -1){
        html_element.className = html_element.className.replace(class_str, '');
    }
}

  phoneInput.onblur = function(){
    if(!phoneNumberInput.value){
     valid = false;        
    displayError('phoneNumber', 'Please enter your number');
    }else if(!isValidPhoneNumber(phoneNumberInput.value)){
    valid = false; 
    displayError('phoneNumber', 'The phone number field is invalid');
    }else{
        hideError('phoneNumber');
    }
}


submitButton.onclick = function(){
    var nameIsValid = checkName();
    var emailIsValid = checkEmail();
    var phoneNumberIsValid = checkphoneNumber();

    var valid = nameIsValid && emailIsValid && phoneNumberIsValid;
    return valid;
 }

function isValidPhoneNumber(str){
    var phoneNumberPattern = new RegExp('^[a-zA-Z \s\'-]{1,}$');
}

共有3个答案

甄霖
2023-03-14

您的代码中有很多内容。我已经对它进行了一些清理,并简化了验证逻辑,以允许更大的扩展性。您可以在此处查看整个工作代码,但要点如下:

超文本标记语言:
与其显示和隐藏每个字段的错误消息,不如考虑使用无序列表来显示错误消息。这种做法很常见,可以大大简化超文本标记语言和JS:

<form>
  <ul class="errors"></ul>
  <label for="phone_number">*Phone Number
    <input name="phone_number" type="text"/>
  </label>
  <br>
  <input type="submit"/>
</form>

这是验证逻辑的核心所在。正如其他人提到的,你可以使用HTML5属性来验证你的数据,但是这缺乏跨浏览器的兼容性,并且容易受到用户的操纵(尽管后一点对于JS验证也是如此;你应该总是在服务器端验证安全)

window.onload = function() {
  var form = document.querySelector('form');

  // listen for the form submission
  form.addEventListener('submit', validate, false);

  function validate(e) {
    var errors  = {},
        valid   = true,
        errorUL = document.querySelector('.errors'),
        node;

    // clear the errors list
    errorUL.innerHTML = '';

    // iterate through the inputs and validate each one using
    // a case statement
    [].forEach.call(e.target, function(input) {
      switch (input.name){
        case 'phone_number':
          if (!validPhoneNumber(input.value)) {
            // add the appropriate error message to the errors object
            errors[input.name] = "Phone number is not valid";
            valid = false; // set the 'valid' flag to false
          }
        // Add more case statements as you need them
        // Example:
        // case 'home_address': 
        // ...
      }
    });

    // if the form is invalid
    if (!valid) {
      // prevent the submission
      e.preventDefault();

      // loop through the errors and add the messages to the errorUL
      for (e in errors) {
        node = document.createElement('li');
        node.innerHTML = errors[e];
        errorUL.appendChild(node);
      }
    }
  }

  // This function will return the validated phone number or null
  // You may want to use this function to convert your phone number
  // string to an integer. This function will accept phone numbers 
  // in the following forms:
  //
  // 123.456.7890
  // 1234567890
  // (123)456-7890
  // (123)-456-7890
  // 123-456-7890
  // 123 456 7890
  function validPhoneNumber(n) {
    var r = /^\(?(\d{3})\W{0,2}(\d{3})\W?(\d{4})$/,
        match = r.exec(n);

    // if the phone number is valid, return the number as an int
    // if the number is invalid, return null
    return match ? match.slice(1).join('')|0 : null;
  }
}

上面的JS做了几件事:

  1. 它查询

希望这能给你一个用JS验证HTML表单的好方法。但是,请始终记住,任何数量的客户端验证都不能替代服务器上的验证。

袁俊弼
2023-03-14

注意:这个答案纯粹是作为表单验证的替代解决方案

使用HTML5输入类型很容易做到这一点。在这种情况下,您可以非常轻松地使用以下内容:

<form>
    <label for="phoneNumber">
        <span class="textStyle">Phone Number*</span>
        <input type="tel" pattern="((\+|00)[0-9]{2}|0)[ -]*[1-9]([ -]*[0-9]){8}" id="phoneNumber">
    </label>
    <button id="submit">Submit</button>
</form>

这就是一切。不需要JavaScript。看看这个演示(其中也包括CSS高亮显示有效性)。

当尝试输入示例国家代码10时,该模式将允许10个数字之间带有或不带空格或破折号,或者国家代码前缀带有100010。测试这个正则表达式

这将适用于所有现代浏览器,但不适用于某些较旧的浏览器。MDN说这只在IE10中得到支持,而Safari不支持。其他浏览器都支持它,除了那些几乎不再使用的旧版本。

孟建木
2023-03-14

看起来您只是将phoneMessage而不是phoneNumberMessage放在这一行:

<span id="phoneNumberMessage" class="message">You must have a valid phone number</span>
 类似资料:
  • 因此,很明显,它识别出输入的名称太短,但我在视图中没有得到任何错误消息,正如这里所预期的:。

  • 所以我想尝试在登录页面上显示“无效用户名或密码”的错误信息,每当用户得到他们是错误的。 到目前为止,我只是将它记录在控制台中,在那里我看到错误:“auth/invalce-email”,其消息属性是:“电子邮件地址格式化得很糟糕。”当输入错误的电子邮件时(密码也是如此)。有什么方法可以在我的singin组件的html中的ngIf div元素中显示这些(或者更确切地说是自定义消息“无效的用户名或密码

  • 有一张Zend登记表。输入用户名、电子邮件、密码和确认密码。电子邮件验证程序如下所示: 有4个验证器:必需类型、电子邮件格式以及数据库中是否有人具有以下电子邮件。错误消息如下:-需要电子邮件-电子邮件地址格式无效-电子邮件地址已存在 尝试使用ajax捕获错误消息和输出时出现问题。在具有以下功能的RegisterController中: 和jQuery文件: 在控制台我得到了这样的东西https:/

  • 本文向大家介绍jquery 表单验证之通过 class验证表单不为空,包括了jquery 表单验证之通过 class验证表单不为空的使用技巧和注意事项,需要的朋友参考一下 在开发系统时,往往都有某些表单数据为必填项,若用jQuery通过ID去验证,不仅会影响效率,还会有所遗漏,不易于后期维护。 本章将介绍如何利用jQuery,通过为表单配置class进行统一验证。(ID一个页面只可以使用一次;cl

  • CodeIgniter 提供了一个全面的表单验证和数据预处理类以帮助缩减你所写的代码。 概述 表单验证指南 表单 成功页面 控制器 设置验证规则 使用一个数组设置验证规则 级联规则(Cascading Rules) 预处理数据(Prepping Data) 重新填充表单(Re-populating the Form) 回调 设置错误信息 更改错误定界符 翻译表单域名字 独立显示错误 将一系列验证规

  • 表单请求验证类 必须 使用 表单请求 - FormRequest 类 来处理控制器里的表单验证。 验证类的 authorize 绝不 使用 authorize() 方法来做用户授权,用户授权我们会单独使用 Policy 授权策略 来实现。 使用基类 所有 FormRequest 表验证类 必须 继承 app/Http/Requests/Request.php 基类。基类文件如下: <?php n