我有一个onblur事件,如果输入了错误的数据,将导致弹出错误窗口。问题是,当我尝试关闭网页或点击任何其他窗口时,onblur事件将激活,弹出窗口将再次出现......任何人都知道如何解决这个问题?
以下是代码的简化版本
<input id="M3_pos_tab" type="text" maxlength="5" name="Blank" size="5" onblur="CheckFS();"/>
<script type="text/javascript">
function CheckFS()
{
var FS_pos = parseFloat(FS_tab.value);
if ((FS_pos == 0) || (FS_pos == parseFloat(L_tab.value)) || (isNaN(FS_pos))) {
} else {
window.alert("Error");
FS_tab.select();
FS_tab.focus();
return;
}
}
答案 0 :(得分:0)
如果您使用的是表格,可以使用onsubmit。
<form action="onsubmit.htm" onsubmit="return CheckInput();">
<!-- input -->
<input type="submit" value="send">
</form>
<script type="text/javascript">
function CheckInput () {
// things you want to check
</script>
如果CheckInput()返回 true ,将提交表单,如果返回 false ,则不会对表单进行汇总。
答案 1 :(得分:0)
我不确定这是多么万无一失,但你可以检查模糊的活动元素。至少在Chrome中,当您单击其他窗口或选项卡时,onblur
事件仍会触发,但活动元素仍然是输入,而不是页面上的其他内容。有点hacky解决方案,但它可能适合你:
function CheckFS() {
if (document.activeElement == FS_tab) {
// if the input is still the active element,
// then we haven't focused anything else on the page,
// so we must have focused something else off of the page
return;
}
var FS_pos = parseFloat(FS_tab.value);
if ((FS_pos == 0) || (FS_pos == parseFloat(L_tab.value)) || (isNaN(FS_pos))) {
} else {
window.alert("Error");
FS_tab.select();
FS_tab.focus();
return;
}
}
答案 2 :(得分:0)
我认为您的问题是,当错误框出现时,它会引起焦点,因此会触发该元素的onblur。我在https://javascript.info/focus-blur上发现了这个问题,它说
由于许多原因会导致焦点丢失。其中之一是访问者单击其他位置时。但是JavaScript本身也可能导致它,例如:
- 警报将焦点移至其自身,因此会导致元素失去焦点(模糊事件),并且在解除警报时,焦点又会返回(焦点事件)。
因此,我建议删除该行
window.alert("Error");
并查看问题是否仍然存在。