所以我有两个文本元素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>
答案 0 :(得分:1)
该功能不会运行两次,但是通过将焦点设置在第二个字段上,您可以强制用户永远呆在那里,或者直到他键入正确的值...即您拥有用户人质。
尝试删除或评论.focus()
行,看看它是否有帮助。
答案 1 :(得分:1)
考虑这个解决方案:
现场演示: http://jsfiddle.net/SCsX2/
另一件事,这个焦点()的东西是不可取的(至少我感觉如此)。红色信息应该足够了:
更好的现场演示: http://jsfiddle.net/SCsX2/2/
您甚至可以在每个输入框keyup事件上运行验证代码。这将使错误消息更具响应性:
更好的现场演示: http://jsfiddle.net/SCsX2/3/
答案 2 :(得分:0)
如果没有alert()
电话,是否会发生同样的事情? alert()
窃取焦点,导致以前聚焦的任何内容模糊。