2011-03-23 120 views
1

因此,我有一個文本框的onchange事件和一個非常簡單的掩碼函數(爲SSN添加破折號)在onkeyup事件上的AJAX調用。這兩個函數都可以正常工作,但是,如果蒙版插入短劃線,然後離開文本框,則onchange事件將不會觸發。onkeyup事件停止onchange ajax事件發生

任何人有任何想法爲什麼?我的猜測是,通過使用掩碼函數更改值,文本框不再認爲任何內容都已更改。

感謝

SSN: <input id="SSN" maxlength="11" size="8" onchange="validateSSN();" onkeyup="mask()"> 
<span id="SSNnote"></span> 

<script type="text/javascript"> 

function validateSSN(){ 
    var cfc = new myajax(); 
    cfc.setCallbackHandler(function(AjaxResults) {UpdateValidationNotes('SSNnote', AjaxResults);}); 
    cfc.ValidateSSN(document.getElementById("SSN").value); 
} 

function mask(){ 

    var temp = document.getElementById("#WhichName#").value; 
    var e = window.event; 
    if (e.keyCode == 189){ 

     document.getElementById("SSN").value = temp.substring(0,temp.length-1); 
     return false; 
    } 

    if (temp.length == 3 || temp.length == 6) 
     if (e.keyCode != 8) 
      document.getElementById("SSN").value = document.getElementById("SSN").value + '-'; 

} 

回答

3

是的,你是對的,如果你改變使用JavaScript框的值onchange將不會觸發。因此,您需要在mask-功能內手動撥打validateSSN()

+1

我看了你的答案後,我頭上生鏽的齒輪開始磨削,我記得以前有這樣的問題。我不能在我的掩碼函數中調用我的validateSSN(),導致我的AJAX顯示消息,並且我只希望它在離開字段時顯示。所以,從onchange到onblur的快速改變解決了問題!不知道爲什麼我沒有想到之前,我想只是多生鏽....謝謝! – Limey 2011-03-23 14:40:14

1

JavaScript函數:

<script type="text/javascript"> 
    function mask(str, textbox, loc, delim) {  
    var locs = loc.split(','); 

    for (var i = 0; i <= locs.length; i++) { 
     for (var k = 0; k <= str.length; k++) { 
     if (k == locs[i]) { 
      if (str.substring(k, k + 1) != delim) { 
       str = str.substring(0, k) + delim + str.substring(k, str.length) 
      } 
     } 
     } 
    } 
    textbox.value = str 
    } 
</script> 

寫這樣的代碼在body標籤:

<label class="label">Social Security Number: *</label> 
<input type="text" size="15" name="social_security_number" class="input" 
    id="txtsocial_security_number" runat="server" 
    onKeyUp="javascript:return mask(this.value,this,'3,6','-');" 
    onBlur="javascript:return mask(this.value,this,'3,6','-');" maxlength="11"> 

這將導致這種格式:797-97-9797