我正在尝试对模糊的数字输入字段执行简单的checkValidity,但无法使其正常工作。这在Chrome中有效吗?例如:
<input onBlur="checkValidity()" type="number" name="x" id="x" min="64" max="2048" value=64>
或
<input onBlur="this.checkValidity()" type="number" name="x" id="x" min="64" max="2048" value=64>
似乎什么也没做。但是,在控制台中,
$("#x")[0].checkValidity()
根据输入框中的当前值和上面的限制(64,2048)返回true或false。这是坏了,还是我做错了?
答案 0 :(得分:5)
这是对您可能想要去的内容的演示:
<input type="number" min="64" max="256" onblur="validate(this);" />
function validate(obj)
{
if(!obj.checkValidity())
{
alert("You have invalid input. Correct it!");
obj.focus();
}
}
注意到我只是在这里展示 概念; alert
可能会导致非常令人不快的体验,所以不要只是复制它。
使用一些浮动DIV来吸引您的用户,而不是完全阻止alert
。
答案 1 :(得分:0)
你应该使用onChange Event
例如
var input1 = document.getElementById('txt_username');
input1.onchange = function(){
input1.setCustomValidity(input1.validity.patternMismatch ? 'username must match a-z,A-Z,0-9,4-16 character' : '');
}
答案 2 :(得分:0)
这是一个解决方案
$("form").focusout(function(){
if(!$("form")[0].checkValidity()){
setTimeout(function(){$(":submit").eq(0).trigger('click');},0);
}
});
如果任何表单元素失去焦点,请检查表单有效性。如果表单无效,请使用jquery单击第一个提交按钮。由于某种原因必须使用超时才能使其正常工作。零超时只会将函数移到函数队列的末尾。
答案 3 :(得分:0)
我意识到这个问题已经有很多年了,但是如果遇到其他人,实现OP想要的行为的正确方法似乎是使用onblur="reportValidity()"
onblur="checkValidity"
。
答案 4 :(得分:-2)
onblur="checkValidity()"
无效,因为blur
事件无法取消。