1

我有一个 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;     
    }
}

4

3 回答 3

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 ,则不会提交表单。

于 2013-07-08T14:32:20.377 回答
0

我不确定这是多么万无一失,但你可以检查模糊的活动元素。至少在 Chrome 中,onblur当您单击不同的窗口或选项卡时,该事件仍会触发,但活动元素仍将是输入,而不是页面上的其他内容。Kinda 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;     
    }
}
于 2013-07-08T14:37:51.967 回答
0

我认为您的问题是,当出现错误框时,它会获得焦点,因此会在元素上触发 onblur。我在https://javascript.info/focus-blur发现了这一点,上面写着

由于许多原因,可能会发生焦点丢失。其中之一是当访问者点击其他地方时。但 JavaScript 本身也可能导致它,例如:

  • 警报将焦点移动到自身,因此它会导致元素失去焦点(模糊事件),并且当解除警报时,焦点会返回(焦点事件)。

因此,我建议删除该行

window.alert("Error"); 

并查看问题是否仍然存在。

于 2018-09-17T15:00:57.143 回答