2017-04-05 46 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>