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

时间:2019-07-18 20:46:38

标签: javascript jquery html checkvalidity

我有输入文本字段,该文本字段应仅允许数字值0-9,并且长度应恰好为八位数字。这应该由onChange事件控制。用户完成操作后,应触发输入验证。如果值正确,则Ajax请求将到达服务器,否则,用户应该像在HTML 5验证中的其他消息一样看到该消息。这是我的代码示例:

$('#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 个答案:

答案 0 :(得分:1)

仅当输入是表单的一部分时才报告有效期。尝试输入无效的值,然后在下面的代码段中提交表单。

$('#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()