html 使用JavaScript进行即时HTML5表单验证

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了html 使用JavaScript进行即时HTML5表单验证相关的知识,希望对你有一定的参考价值。


<style>
input[aria-invalid="true"], textarea[aria-invalid="true"] {
  border: 1px solid #f00;
  box-shadow: 0 0 4px 0 #f00;
}
</style>


<form action="#" method="post">
  <fieldset>

    <legend><strong>Add your comment</strong></legend>

    <p>
      <label for="author">Name <abbr title="Required">*</abbr></label>
      <input 
        aria-required="true"
        id="author"
        name="author"
        pattern="^([- \w\d\u00c0-\u024f]+)$"
        required="required"
        size="20"
        spellcheck="false"
        title="Your name (no special characters, diacritics are okay)"
        type="text"
        value="">
    </p>

    <p>
      <label for="email">Email <abbr title="Required">*</abbr></label>
      <input 
        aria-required="true"
        id="email"
        name="email"
        pattern="^(([-\w\d]+)(\.[-\w\d]+)*@([-\w\d]+)(\.[-\w\d]+)*(\.([a-zA-Z]{2,5}|[\d]{1,3})){1,2})$" 
        required="required"
        size="30"
        spellcheck="false"
        title="Your email address"
        type="email"
        value="">
    </p>

    <p>
      <label for="website">Website</label>
      <input
        id="website"
        name="website"
        pattern="^(http[s]?:\/\/)?([-\w\d]+)(\.[-\w\d]+)*(\.([a-zA-Z]{2,5}|[\d]{1,3})){1,2}(\/([-~%\.\(\)\w\d]*\/*)*(#[-\w\d]+)?)?$"
        size="30"
        spellcheck="false"
        title="Your website address"
        type="url"
        value="">
    </p>

    <p>
      <label for="text">Comment <abbr title="Required">*</abbr></label> 
      <textarea
        aria-required="true"
        cols="40"
        id="text"
        name="text"
        required="required"
        rows="10"
        spellcheck="true"
        title="Your comment"></textarea>
    </p>

  </fieldset>
  <fieldset>

    <button name="preview" type="submit">Preview</button>
    <button name="save" type="submit">Submit Comment</button>

  </fieldset>
</form>



<script>

// Basic addEvent function
function addEvent(node, type, callback) {
  if (node.addEventListener) {
    node.addEventListener(type, function(e) {
      callback(e, e.target);
    }, false);
  } else if (node.attachEvent) {
    node.attachEvent('on' + type, function(e) {
      callback(e, e.srcElement);
    });
  }
}

//determining whether a given field should be validated (simply tests that it’s neither disabled nor readonly, and that it has either a pattern or a required attribute)
function shouldBeValidated(field) {
  return (
    !(field.getAttribute("readonly") || field.readonly) &&
    !(field.getAttribute("disabled") || field.disabled) &&
    (field.getAttribute("pattern") || field.getAttribute("required"))
  );
}
//The first two conditions may seem verbose, but they are necessary, because an element’s disabled and readonly properties don’t necessarily reflect its attribute states. In Opera, for example, a field with the hard-coded attribute readonly="readonly" will still return undefined for its readonly property (*the dot property only matches states which are set through scripting).

//main validation function: tests the field and then performs the actual validation
function instantValidation(field) {
  if (shouldBeValidated(field)) {
    //A field is invalid if it’s required but doesn’t have a value, 
    //or it has a pattern and a value but the value doesn’t match the pattern.
    //'pattern' defines the string form of a regular-expression, so we pass it to the RegExp constructor 
    //and that will create a regex object we can test against the value.
    //but we do have to pre-test the value to make sure it isn’t empty,
    //so that the regular expression itself doesn’t have to account for empty strings.
    var invalid =
      (field.getAttribute("required") && !field.value) ||
      (field.getAttribute("pattern") &&
        field.value &&
        !new RegExp(field.getAttribute("pattern")).test(field.value));

    //then control its aria-invalid attribute to indicate that state:
    //adding it to an invalid field that doesn’t already have it, 
    //or removing it from a valid field that does. 
    if (!invalid && field.getAttribute("aria-invalid")) {
      field.removeAttribute("aria-invalid");
    } else if (invalid && !field.getAttribute("aria-invalid")) {
      field.setAttribute("aria-invalid", "true");
    }
  }
}

//to put this all into action, we need to bind the validation function to an onchange event
addEvent(document, "change", function(e, target) {
  instantValidation(target);
});

//for that to work, the onchange events must bubble (using a technique that’s usually known as event delegation), 
//in IE8 and earlier onchange events don’t bubble.
/*
//workaround: get the collections of input and textarea elements, iterate through them and bind the onchange event to each field individually:

var fields = [
  document.getElementsByTagName("input"),
  document.getElementsByTagName("textarea")
];
for (var a = fields.length, i = 0; i < a; i++) {
  for (var b = fields[i].length, j = 0; j < b; j++) {
    addEvent(fields[i][j], "change", function(e, target) {
      instantValidation(target);
    });
  }
}
*/

</script>

以上是关于html 使用JavaScript进行即时HTML5表单验证的主要内容,如果未能解决你的问题,请参考以下文章

使用 jQuery 即时构建 HTML 表格

JavaScript 即时编译

21JavaScript笔记

html 使用ES2015即时在浏览器中进行快速反应原型设计。使用它作为游乐场的样板,并在某些服务器上上传html文件。

即时通讯是怎么做到的?

使用javascript代码即时拨打电话号码