停止双重执行事件

时间:2011-01-05 17:07:36

标签: javascript

所以我有两个文本元素A和B,并且在两个对象的onblur事件中,我有相同的验证函数,如果B(日期字段)错误,它将弹出一条消息。现在,如果我更改A,然后选择B,它将运行该功能两次。似乎它为A和B的onblur运行一次。这会导致用户两次得到相同的错误消息。

我需要做些什么来强制A的onblur不允许任何其他事件开始?

这是我编写的一个例子。如果您在第二个字段,并尝试转到第一个字段,如果将运行该函数两次

function myVal(){
    if (document.getElementById("B").value == 'Z') {
        alert('Bad Value');
        document.getElementById("B").focus();
    }
}

<form>
    <input name="A" value="A" onblur="myVal();"/>
    <input name="B" value="Z" onblur="myVal();"/>
</form>

3 个答案:

答案 0 :(得分:1)

该功能不会运行两次,但是通过将焦点设置在第二个字段上,您可以强制用户永远呆在那里,或者直到他键入正确的值...即您拥有用户人质。

尝试删除或评论.focus()行,看看它是否有帮助。

答案 1 :(得分:1)

考虑这个解决方案:

现场演示: http://jsfiddle.net/SCsX2/

另一件事,这个焦点()的东西是不可取的(至少我感觉如此)。红色信息应该足够了:

更好的现场演示: http://jsfiddle.net/SCsX2/2/

您甚至可以在每个输入框keyup事件上运行验证代码。这将使错误消息更具响应性:

更好的现场演示: http://jsfiddle.net/SCsX2/3/

答案 2 :(得分:0)

如果没有alert()电话,是否会发生同样的事情? alert()窃取焦点,导致以前聚焦的任何内容模糊。