JavaScript 函数用于验证在 OnBlur 事件中调用的数字。如果该值无效,它将弹出提示并将焦点返回到该字段。
示例代码:
<!DOCTYPE html>
<html>
<body>
Enter your number: <input type="text" id="fname" onfocus="this.select()" onblur="myFunction(this)">
<script>
function myFunction(field) {
if( isNaN(field.value)){
alert('wrong !!!');
field.focus();
return false;
}
}
</script>
</body>
</html>
在 Internet Explorer 11(版本 11.447.14393.0)/Windows 10 中验证工作正常。
但在 chrome 中点击 ok 或关闭 alert 按钮后,焦点不会返回到字段。再次弹出警报。因此,每次单击“确定”/“关闭”时,警报都会不断弹出。
chrome 版本是 63.0.3239.132
最佳答案
这看起来像一个 chrome bug .也许您可以在 crbug.com 提交/投票.
您的需求可以通过一些解决方法来实现。
- 将字段值设置为
空值
。
function myFunction(field)
{
if(isNaN(field.value))
{
alert('wrong !!!');
field.value="";
field.focus();
return false;
}
}
Enter your number: <input type="text" id="fname1" onfocus="this.select()" onblur="myFunction(this)">
- 如果您不需要清除该值,请将元素置于
setTimeout
中。
function myFunction(field)
{
if(isNaN(field.value))
{
alert('wrong !!!');
setTimeout(function(){
field.focus();
},0);
return false;
}
}
Enter your number: <input type="text" id="fname1" onfocus="this.select()" onblur="myFunction(this)">
- 在
alert
完成后删除和添加 onblur 事件。
function myFunction(field)
{
if(isNaN(field.value))
{
alert('wrong !!!');
var onblurevent=field.onblur;
field.onblur = "";
setTimeout(function(){
field.focus();
field.onblur=onblurevent;
},0);
return false;
}
}
Enter your number: <input type="text" id="fname1" onfocus="this.select()" onblur="myFunction(this)">
关于javascript - Chrome 中的 onblur onfocus 无限循环问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48536618/