无限循环中的Javascript警报消息

Roh*_*rma 7 html javascript dom-events

无限循环中的警报框,在这里我试图在2个连续的字段上放置弹出警报消息,这样它们就不会留空,我知道它为什么会发生 - 因为当启动第一个函数的onblur事件时它将焦点放在第二个当它跳回到第二个文本字段的第一个onblur时启动.

我知道在表单级别完成验证会是最好的,但这是我得到的要求.

有帮助吗?

Javascript代码

function x()
{
   if( document.getElementById("1").value.length==0)
   {
      alert('1 is required');
      document.getElementById("1").focus();
   }
}

function y()
{
   if(document.getElementById("2").value.length==0)
   {
      alert('2 is required');
      document.getElementById("2").focus();
   }
}
Run Code Online (Sandbox Code Playgroud)

HTML代码

<input type="text" name="City Name" id="1" onblur="javascript:x();">
<input type="text" name="Kitty Name" id="2" onblur="javascript:y();">
Run Code Online (Sandbox Code Playgroud)

小智 6

onblur()您可以在事件中处理它,而不是在事件中处理它onchange()

如果仍要使用onblur(),请使用内部焦点setTimeout,如下所示。

alert('2 is required');
setTimeout(function() { document.getElementById("2").focus(); }, 100); 
Run Code Online (Sandbox Code Playgroud)


小智 1

我的建议:将您的验证合并到一种方法中,并按顺序检查其中的每个方法。

所以(伪代码):

function validate() {
     for (field in fieldlist) {
         if (document.getElementById(field).value.length == 0) {
              displayerror();
              document.getElementById(field).focus();
         }
     }
}
Run Code Online (Sandbox Code Playgroud)

这样您一次只会显示一个错误。