Onblur功能继续运行

问题描述 投票:1回答:3

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

javascript events onblur
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,则不会对表单进行求和。


0
投票

我不确定这是多么万无一失,但你可以检查模糊的活动元素。至少在Chrome中,当你点击不同的窗口或标签时,onblur事件仍然会激活,但是活动元素仍然是输入,而不是页面上的其他内容。有点hacky解决方案,但它可能适合你:

Sample fiddle

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;     
    }
}

0
投票

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

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

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

因此,我建议删除该行

window.alert("Error"); 

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

© www.soinside.com 2019 - 2024. All rights reserved.