首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用spans连接输入

用spans连接输入
EN

Stack Overflow用户
提问于 2018-06-23 20:19:44
回答 1查看 151关注 0票数 0

我做了一个小的输入验证。现在的问题是,在每个输入字段后面都写着:“电子邮件不能是空的”。目的是选择输入字段的名称,并将这些名称放在消息之前。所以你会得到:"userName不能是空的,密码不能是空的,passwordCheck不能是空的“。通过这种方式,我希望input fieldsspans能够相互连接。这个是可能的吗?如果是这样的话,是怎么做的?提前谢谢你。

HTML

代码语言:javascript
复制
    <!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="span.js"></script>

    <script>
        window.onload = function() {
            //validator.className = "ValidateField";
        }
    </script>
</head>

<body>

    <form>
        <div>
            Name: <input type="text" name="userName" class="ValidateField" data-validate="EmptyAllowed|min-5|max-20">
            <span class="SpanField" name="spanUser" style="color:red"></span>
        </div>
        <div>
            Password: <input type="password" name="password" class="ValidateField" data-validate="EmptyAllowed|min-5|max-20|symbols-not-allowed">
            <span name="spanPassword" class="SpanField" style="color:red"></span>
        </div>
        <div>
            Password again: <input type="password" class="ValidateField" name="passwordCheck" data-validate="EmptyNotAllowed|min-5|max-20">
            <span name="spanPasswordCheck" class="SpanField" style="color:red"></span>
        </div>
        <div>
            E-mail: <input type="email" name="email" class="ValidateField" data-validate="EmptyNotAllowed|min-5|max-100">
            <span name="spanEmail" class="SpanField" style="color:red"></span>
        </div>
        <div>
            <input type="button" value="registreren" onclick="validator.validateNow()">
        </div>
    </form>
</body>

</html>

Javascript

代码语言:javascript
复制
var validator = (function () {
        var my = {};
        var checkList = {};
        var minList = {};
        var maxList = {};
        var validationFields;


        function validateField(field) {

            function showText(error) {
                var spans = document.getElementsByClassName("SpanField");

                for (s = 0; s < spans.length; s++) {
                    spans[s];
                }

                var say = function () {
                    spans[0].innerHTML = (field.name + error);
                    spans[1].innerHTML = (field.name + error);
                    spans[2].innerHTML = (field.name + error);
                    spans[3].innerHTML = (field.name + error);
                }
                say();
            }
            var checks = field.dataset.validate;

            checkList = checks.split('|');

            var min = checkList[1];
            minList = min.split('-');

            var max = checkList[2];
            maxList = max.split('-');

            if (EmptyNotAllowed(field.value)) {
                showText(" can't be empty");

            } else {
                alert(field.name + "OK!");
            }

            if (minLength(field.value)) {
                showText("must be longer");
            }

            if (maxLength(field.value)) {
                showText("must be shorter");
            }
        }



        function EmptyNotAllowed(value) {
            if (value == '') {
                return true;
            } else {
                return false;
            }
        }

        function SymbolsNotAllowed() {
            alert("binnenkort beschikbaar");
            return true;
        }


        function minLength(value) {
            if (value.length > 0 && value.length < minList[1]) {
                return true;
            } else {
                return false;
            }
        }

        function maxLength(value) {
            if (value.length > maxList[1]) {
                return true;
            } else {
                return false;
            }
        }

        my.className = "ValidateField";

        my.validateNow = function () {

            validationFields = document.getElementsByClassName(my.className);

            for (f = 0; f < validationFields.length; f++) {
                validateField(validationFields[f]);
            }

        };

        return my;
    }());
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-23 20:32:06

您应该将正在验证的当前字段对象传递给showText函数,然后使用field.nextElementSibling获取span,并显示您的showText()函数的innerhtml如下所示。

代码语言:javascript
复制
function showText(field,error) {
  var say = function(span) {
    span.innerHTML = (field.name + error);
  }

  //get the span
  let span=field.nextElementSibling;

  say(span);
}

见演示

代码语言:javascript
复制
var validator = (function() {
  var my = {};
  var checkList = {};
  var minList = {};
  var maxList = {};
  var validationFields;


  function validateField(field) {

    function showText(field, error) {
      console.log(field.nextElementSibling);

      let span = field.nextElementSibling;
      var say = function(span) {
        span.innerHTML = (field.name + error);
      }
      say(span);
    }

    var checks = field.dataset.validate;

    checkList = checks.split('|');

    var min = checkList[1];
    minList = min.split('-');

    var max = checkList[2];
    maxList = max.split('-');

    if (EmptyNotAllowed(field.value)) {
      showText(field, " can't be empty");

    } else {
      alert(field.name + "OK!");
    }

    if (minLength(field.value)) {
      showText(field, "must be longer");
    }

    if (maxLength(field.value)) {
      showText(field, "must be shorter");
    }
  }



  function EmptyNotAllowed(value) {
    if (value == '') {
      return true;
    } else {
      return false;
    }
  }

  function SymbolsNotAllowed() {
    alert("binnenkort beschikbaar");
    return true;
  }


  function minLength(value) {
    if (value.length > 0 && value.length < minList[1]) {
      return true;
    } else {
      return false;
    }
  }

  function maxLength(value) {
    if (value.length > maxList[1]) {
      return true;
    } else {
      return false;
    }
  }

  my.className = "ValidateField";

  my.validateNow = function() {

    validationFields = document.getElementsByClassName(my.className);

    for (f = 0; f < validationFields.length; f++) {
      validateField(validationFields[f]);
    }

  };

  return my;
}());
window.onload = function() {
  //validator.className = "ValidateField";
}
代码语言:javascript
复制
<form>
  <div>
    Name: <input type="text" name="userName" class="ValidateField" data-validate="EmptyAllowed|min-5|max-20">
    <span class="SpanField" name="spanUser" style="color:red"></span>
  </div>
  <div>
    Password: <input type="password" name="password" class="ValidateField" data-validate="EmptyAllowed|min-5|max-20|symbols-not-allowed">
    <span name="spanPassword" class="SpanField" style="color:red"></span>
  </div>
  <div>
    Password again: <input type="password" class="ValidateField" name="passwordCheck" data-validate="EmptyNotAllowed|min-5|max-20">
    <span name="spanPasswordCheck" class="SpanField" style="color:red"></span>
  </div>
  <div>
    E-mail: <input type="email" name="email" class="ValidateField" data-validate="EmptyNotAllowed|min-5|max-100">
    <span name="spanEmail" class="SpanField" style="color:red"></span>
  </div>
  <div>
    <input type="button" value="registreren" onclick="validator.validateNow()">
  </div>
</form>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51004723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档