onkeyup事件停止onchange ajax事件从触发

时间:2011-03-23 14:29:43

标签: javascript ajax

所以我对onkeyup事件的文本框的onchange事件和一个非常简单的掩码函数(将破折号添加到SSN)进行了一次AJAX调用。这两个函数都可以正常工作,但是,如果蒙版插入破折号然后我移出文本框,onchange事件将不会触发。

任何人都有任何想法?我的猜测是,通过使用掩码功能更改值,文本框不再认为有任何改变。

由于

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 + '-';

}

2 个答案:

答案 0 :(得分:3)

是的,您是对的,onchange如果您使用javascript更改了该框的值,则会被激活。因此,您需要在validateSSN() - 函数内手动调用mask

答案 1 :(得分: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>

将此代码写入正文标记:

<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