2017-04-05 87 views
0

我有一个场景,我想查看一些regex并在正则表达式失败时触发alert消息。Javascript验证警报正在多次触发

所以会发生的是,当点击确定后触发警报时,它会再次触发相同的警报。

下面是代码: -

function validateSAPID() { 
     var regex = /^[a-zA-Z0-9-]+$/m; 
     var strSAP = document.getElementById('txtSearchSAP').value; 
     if (strSAP.match(regex)) { 
      return true; 
     } 
     else { 
      alert("Please enter proper SAP ID"); 
      $('#txtSearchSAP').focus(); 
      $('#txtSearchSAP').val(''); 
      return false; 
     } 
    } 

textbox HTML低于: -

<input type="text" id="txtSearchSAP" onkeyup='FilterGrid(this);' onblur="validateSAPID();" class="field-style field-full align-none" maxlength="18" /> 
+2

包裹.focus/.VAL线在setTimeout的 - 顺便说一下,Firefox和Chrome不要产生你声称的行为 - 你使用什么浏览器,你可以创建一个最小*工作*例如发生这种情况 –

+0

@JaromandaX:我检查在CHROME – BNN

+0

我看到的代码模式的行为就像在Chrome中奇怪的是,我写的一个简单的测试没有 –

回答

0

尝试调用validateSAPID(); FilterGrid(this)里面; onkeyup事件

0

(我知道我的语法不好,所以下跌自由编辑)

我已经做了一些测试,似乎是$("#txtSearchSAP").focus();先出现,然后触发alert("Please enter proper SAP ID");导致失去重心,并再次运行功能。

林不知道是否是最有效的方式做到这一点,但是这是我得到的解决方案:

<body > 
     <input type="text" id="txtSearchSAP" class="field-style field-full align-none" maxlength="18" /> 
    </body> 
    <script> 
     $(document).ready(function(){ 
      $("#txtSearchSAP").focusout(function(){ 
       var regex = /^[a-zA-Z0-9-]+$/m; 
       var strSAP = $("#txtSearchSAP").val(); 
       if (strSAP.match(regex) == null) { 
        alert("Please enter proper SAP ID"); 
        } 
        setTimeout(function(){ 
        $("#txtSearchSAP").val(""); 
        $("#txtSearchSAP").focus(); 
        }, 1); 
      }); 
     }); 
    </script>