Onblur功能继续运行

时间:2013-07-08 14:15:59

标签: javascript events onblur

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

3 个答案:

答案 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解决方案,但它可能适合你:

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

答案 2 :(得分:0)

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

  

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

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

因此,我建议删除该行

window.alert("Error"); 

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