【问题标题】:Live validation using javascript使用 javascript 进行实时验证
【发布时间】:2013-03-07 06:22:26
【问题描述】:
  • 我在这里有一个文本框验证。错误消息不会作为警报出现,而是会打印在 html div 标签中。

HTML:

    <div id="error" style="position:absolute; left:auto; top:7px;"></div>
    <div style="position:absolute; left:auto; top:25px;">
    First name: <input type="text" id="fname" name="fname"><br>
    Last name: <input type="text" id="lname" name="lname"><br>
    <input type="submit" value="Submit" onclick="requiredFields()"><div>

Javascript:

function requiredFields(){
    var fName = document.getElementById("fname").value;
    var lName = document.getElementById("lname").value;
    if(fName == ""){
        document.getElementById("error").innerHTML = "First name field cannot be empty";
    }else if(lName == ""){
        document.getElementById("error").innerHTML = "Last name field cannot be empty";
    }else{
        document.getElementById("error").innerHTML = "";
        alert("successful");
    }
}
  • 单击按钮时,正在打印错误消息。
  • 我的问题是,javascript 中有实时验证吗?
  • 我的意思是,首先应该出现错误消息,单击按钮,以及用户在文本框中输入值的时间,如果名字文本框有任何值,我需要清除错误消息而无需再次单击按钮.

只需检查我的链接并帮助我..http://jsfiddle.net/GACKm/

【问题讨论】:

  • 这是一个somewhat complex example(使用jQuery),但是如果您查看在submit 上调用的事件处理和函数,或多或少只需将消息部分放入函数中可以由您的提交和验证函数结束时调用,然后使用blurchange 在每个必填字段上触发事件。
  • @Rachel 看看我的答案我已经测试过它并且它的工作原理,我什至为你提供了 jsfiddle..

标签: javascript button


【解决方案1】:

这里是jsFiddle

//Javascript

<script type="text/javascript" language="javascript">
    var oneTimeMsgClikced = false;
    function requiredFields() {
        var fName = document.getElementById("fname").value;
        var lName = document.getElementById("lname").value;
        if (fName == "") {
            document.getElementById("error").innerHTML = "First name field cannot be empty";
            oneTimeMsgClikced = false;
        } else if (lName == "") {
            document.getElementById("error").innerHTML = "Last name field cannot be empty";
            oneTimeMsgClikced = false;
        } else {
            document.getElementById("error").innerHTML = "";
            if (oneTimeMsgClikced == false) {
                alert("successful");
                oneTimeMsgClikced = true;
            }
        }
    }
</script>

//html代码

<body>
    <div id="error" style="position: absolute; left: auto; top: 7px;">
        Errors here
    </div>
    <div style="position: absolute; left: auto; top: 25px;">
        First name:
        <input type="text" id="fname" name="fname" onblur="requiredFields()" />
        <br />
        Last name:
        <input type="text" id="lname" name="lname" onblur="requiredFields()"/>
        <br />
        <input type="submit" value="Submit" onclick="requiredFields()" />
    </div>
</body>

【讨论】:

    【解决方案2】:

    这是一种使用一些比内联事件处理程序更现代的方法(例如,onchange="")的方法。正如您将看到的,这是由data- 属性驱动的,虽然它目前尚未配置为处理除input[type=text] 以外的任何内容,但它可以扩展为与selects、textareas 一起使用,等等

    由于这些版本使用attachEvent 而不是addEventListener 来设置事件处理程序,因此下面的内容没有任何借口可以与IE8 及更低版本一起使用。同样,这可以工作,但它确实适用于所有其他现代浏览器。它应该可以在 IE9 中运行,尽管这未经测试。

    它可能看起来发生了很多事情,但是看看它,看看你是否能弄清楚它是如何运作的。如有任何问题,请随时问我。

    这是一个小提琴(在 Chrome 和 Firefox 中测试):

    http://jsfiddle.net/ndXTb/

    HTML

    <aside>
        <ol id="errors"></ol>
    </aside>
    <section id="signup">
        <form action="#">
            <p>
                <label for="fname">First Name:</label>
                <span>
                    <input type="text" id="fname" name="fname" class="required" 
                           data-validate-error="First name may not be empty."
                           data-error-sort="0"/>
                </span>
            </p>
            <p>
                <label for="lname">Last name:</label>
                <span>
                    <input type="text" id="lname" name="lname" class="required" 
                           data-validate-error="Last name may not be empty."
                           data-error-sort="1"/>
                </span>
            </p>
            <p>
                <label for="addr1">Address 1:</label>
                <span>
                    <input type="text" id="addr1" name="addr1" class="required" 
                           data-validate-error="Address may not be empty."
                           data-error-sort="2"/>
                </span>
            </p>
            <p>
                <label for="addr2">Address 2:</label>
                <span><input type="text" id="addr2" name="addr2"/></span>
            </p>
            <p>
                <label for="city">City:</label>
                <span>
                    <input type="text" id="city" name="city" class="required" 
                           data-validate-error="City may not be empty."
                           data-error-sort="3"/>
                </span>
            </p>
            <p>
                <label for="state">State:</label>
                <span>
                    <input type="text" id="state" name="state" class="required" 
                           data-validate-error="State may not be empty."
                           data-error-sort="4"/>
                </span>
            </p>
            <p>
                <span></span>
                <span style="text-align: right;">
                    <input type="submit" value="Submit"/>
                </span>
            </p>
        </form>
    </section>
    

    CSS

    #signup {
        display: table;
    }
    #signup form > p {
        display: table-row;
    }
    #signup p > label,
    #signup p > span {
        display: table-cell;
        font-weight: bold;
        padding: 5px;
    }
    #signup p > label {
        text-align: right;
        width: 150px;
    }
    .validationerror input {
        border: 1px solid #a00;
        background-color: #ffd;
        padding: 2px 1px;
    }
    .validationerror:after {
        content: '!';
    }
    

    Javascript

    window.addEventListener('load', function init(){
        var signup = document.getElementById('signup'),
            fields = signup.getElementsByClassName('required'),
            errors = document.getElementById('errors'),
            error = '<li>{error}</li>',
            submitted = false,
            errorlog = [],
            index = 0,
            field,
            focusin;
    
        signup.addEventListener('submit', validateform);
    
        while (field = fields[index++]) {
            field.addEventListener('blur', validatefield);
            field.addEventListener('keyup', validatefield);
        }
    
        function validatefield() {
            var message = this.dataset['validateError'],
                sort = this.dataset['errorSort'],
                parent = this.parentNode;
    
            if (this.value === '' && (message && sort)) {
                errorlog[sort] = error.replace('{error}', message);
                parent.className += ' validationerror';
    
                if (!focusin) {
                    focusin = this;
                }
            } else if (this.value !== '' && (message && sort)) {
                delete errorlog[sort];
    
                parent.className = parent.className.replace('validationerror', '');
    
                if (focusin == this) {
                    focusin = null;
                }
            }
    
            if (!submitted) {
                isvalid();
            }
        }
    
        function validateform(event) {
            index = 0;
            errorlog = [];
            focusin = null;
    
            submitted = true;
    
            while (field = fields[index++]) {
                callevt(field, 'focus');
                callevt(field, 'blur');
            }
    
            submitted = false;
    
            if (!isvalid()) {
                if (focusin) {
                    focusin.focus();
                }
    
                focusin = null;
    
                event.preventDefault();
                return false;
            }
        }
    
        function isvalid() {
            errors.innerHTML = '';
    
            if (errorlog.length) {
                errors.innerHTML = errorlog.join('');
    
                return false;
            }
    
            return true;
        }
    
        function callevt(el, type) {
            var evt = document.createEvent('HTMLEvents');
    
            evt.initEvent(type, true, true);
            el.dispatchEvent(evt);
        }
    });
    

    【讨论】:

      【解决方案3】:

      你可以试试onBluronKeyUp

      【讨论】:

      【解决方案4】:

      您不应该对提交使用 onclick 事件处理程序。

      对于实时验证,您可以使用 onblur,将其插入输入框中。这将在您每次离开输入字段时验证输入。

      【讨论】:

      • 你能检查链接吗.. jsfiddle.net/GACKm 按钮的点击事件处理程序是必要的..
      • @Rachel - Bazinga777 表示您需要处理forms submit 事件,而不是input[type=submit] 的点击事件。这不会阻止form 提交(onclick),这就是这里的意思。您的小提琴在 input[type=submit] 周围没有 form 元素,因此您看不到问题。
      • @Jared Farrish 好的...谢谢
      【解决方案5】:

      你可以试试这个:

      <script>
      function checkFName()
      {
          fName = document.getElementById("fname").value;
          if(fName == ""){
              document.getElementById("error").innerHTML = "First name field cannot be empty";
              document.getElementById("fname").focus;
              return false;
          }
      }
      
      function checkLName()
      {
          lname = document.getElementById("lname").value;
          if(lname == ""){
              document.getElementById("error").innerHTML = "Last name field cannot be empty";
              document.getElementById("lname").focus;
              return false;
          }
      }
      </script>
      
      
      <div id="error" style="position:absolute; left:auto; top:7px;"></div>
          <div style="position:absolute; left:auto; top:25px;">
          First name: <input type="text" id="fname" name="fname" onchange="checkFName();"><br>
          Last name: <input type="text" id="lname" name="lname" onchange="checkLName();"><br>
          <input type="submit" value="Submit"><div>
      

      希望这会有所帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-28
        • 1970-01-01
        • 1970-01-01
        • 2013-10-25
        • 2015-06-25
        • 1970-01-01
        • 2014-05-06
        • 1970-01-01
        相关资源
        最近更新 更多