Событие onkeyup останавливает событие onchange ajax от запуска - PullRequest
1 голос
/ 23 марта 2011

Итак, у меня есть вызов AJAX для события onchange текстового поля и очень простая функция маски (для добавления тире в SSN) для события onkeyup. Обе эти функции прекрасно работают сами по себе, однако, если маска вставляет черту, а затем я перемещаюсь из текстового поля, событие 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 + '-';

}

Ответы [ 2 ]

3 голосов
/ 23 марта 2011

Да, вы правы, onchange не сработает, если вы измените значение поля, используя javascript.Поэтому вам нужно вызвать validateSSN() вручную внутри вашей mask -функции.

1 голос
/ 27 июля 2011

Функция 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...