2011-03-23 3 views
1

Итак, у меня есть вызов AJAX в событии onchange текстового поля и очень простая функция маски (чтобы добавить тире к SSN) в событие onkeyup. Обе эти функции отлично работают на самом деле, однако, если маска вставляет тире, а затем я удаляю текстовое поле, событие onchange не срабатывает.onkeyup event останавливается onchange событие ajax от обжига

У кого-нибудь есть идеи, почему? Я предполагаю, что, изменив значение с помощью функции 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 + '-'; 

} 

ответ

3

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

+1

После того как я прочитал ваш ответ, ржавые механизмы в моей голове начали шлифовать, и я помню такие проблемы, как раньше. Я не могу вызвать мой validateSSN() в моей маске, потому что мои сообщения AJAX отображают сообщения, и я хочу, чтобы они отображались только при выходе из поля. Итак, быстрое переключение с onchange на onblur решило проблему! Не уверен, почему я не думал об этом раньше, я думаю, просто сильно ржавеет .... Спасибо! – Limey

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