代码之家  ›  专栏  ›  技术社区  ›  espresso_coffee

如何触发HTML5验证并在更改事件上设置自定义消息?

  •  1
  • espresso_coffee  · 技术社区  · 6 年前

    0-9 应该正好是8位数长。这应该由 onChange 事件。一旦用户输入完毕,就应该触发验证。如果值正确,Ajax请求将到达服务器,如果不正确,用户应该看到与html5验证中其他消息一样的消息。下面是我的代码示例:

    $('#userid').on('change', checkUser);
    
    function checkUser(e) {
      var fldObj = $(this);
    
      if (!e.target.checkValidity()) {
        fldObj[0].setCustomValidity('Invalid User ID.');
        console.log(fldObj.val());
      } else {
        //send ajax request
        console.log('User ID is valid!');
      }
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    
    
    <input type="text" name="userid" id="userid" value="" pattern="[0-9]{8}" placeholder="Enter User ID">

    我的代码工作不正常。如果输入无效值,则看不到消息。如果有人知道消息没有显示的原因,请让我知道。

    1 回复  |  直到 6 年前
        1
  •  1
  •   crenshaw-dev    6 年前

    只有当输入是表单的一部分时,才会报告有效性。请尝试输入无效值并在下面的代码段中提交表单。

    $('#userid').on('change', checkUser);
    
    function checkUser(e) {
      var fldObj = $(this);
    
      if (!e.target.checkValidity()) {
        fldObj[0].setCustomValidity('Invalid User ID.');
        fldObj[0].parentElement.reportValidity();
        console.log(fldObj.val());
      } else {
        //send ajax request
        console.log('User ID is valid!');
      }
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    
    <form>
        <input type="text" name="userid" id="userid" value="" pattern="[0-9]{8}" placeholder="Enter User ID">
        <button type="submit">Submit</button>
    </form>

    如果不想等待单击“提交”按钮,请签出 HTMLFormElement.reportValidity() .