【问题标题】:onkeyup event stops onchange ajax event from firingonkeyup 事件阻止 onchange ajax 事件触发
【发布时间】:2011-03-23 14:29:43
【问题描述】:

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

有人知道为什么吗?我的猜测是,通过使用 mask 函数更改值,文本框不再认为有任何变化。

谢谢

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

}

【问题讨论】:

    标签: javascript ajax


    【解决方案1】:

    是的,您是对的,如果您使用 javascript 更改框的值,onchange 将不会触发。所以你需要在你的mask-function 中手动调用validateSSN()

    【讨论】:

    • 看了你的回答后,我脑子里生锈的齿轮开始磨了,我记得以前有这样的问题。我不能在我的掩码函数中调用我的 validateSSN(),因为我的 AJAX 显示消息,我只希望它在他们离开该字段时显示。因此,从 onchange 到 onblur 的快速更改解决了这个问题!不知道为什么我以前没有想到这一点,我想只是生锈了....谢谢!
    【解决方案2】:

    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

    【讨论】:

      猜你喜欢
      • 2013-08-22
      • 1970-01-01
      • 2013-02-08
      • 2017-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多