2011-01-05 38 views
0

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

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

这里是一个〔实施例的代码我做了。如果你是在2场,并尝试去第一,如果将运行功能两次

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> 
+2

你真的需要张贴代码,或再现问题一个简单的例子。 – user113716 2011-01-05 17:12:52

回答

1

考虑这样的解决方案:

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

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

更好的现场演示:​​

,你甚至可以运行在每个输入框keyup事件验证码。这将使该错误消息更加敏感:

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

+0

我真的很喜欢第一个链接。它的简单和干净,并保持在那里,直到他们有权利。谢谢! – Limey 2011-01-05 18:06:20

0

做同样的事情发生,而不alert()电话吗? alert()抢断焦点,导致之前关注的任何内容模糊。

+0

我将不得不检查,但我需要警报通知我的用户。 刚刚试过它没有警报(我做了第三个文本字段,其中我加1的值),它仍然运行两次。 – Limey 2011-01-05 17:37:03

+0

@Limey,你可以使用其他方法来提供反馈吗?在现场附近发布某种内联通知? – eyelidlessness 2011-01-05 17:38:34

1

该函数不会运行两次,但通过将焦点设置在第二个字段上,您可以强制用户永远停留在此处,或者直到他输入正确的值为止。即您有用户人质。

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

+0

我刚发现这是我测试中的问题。有什么办法可以迫使他们留在对象上,直到他们正确地填充,而不是在他们错误的时候运行两次验证? – Limey 2011-01-05 17:44:34

+0

@Limey使用jQuery和ŠimeVidas代码是一种方法,但我个人建议仅在表单提交时运行验证,然后只设置焦点。 – 2011-01-05 17:50:02

+0

该函数运行两次。当他们试图将其留给具有相同验证的另一个字段时,您会收到消息两次。 – Limey 2011-01-05 18:32:09