2011-03-23 118 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