2011-03-23 5 views
1

J'ai donc un appel AJAX sur l'événement onchange d'une zone de texte et une fonction de masque très simple (pour ajouter des tirets à un SSN) sur l'événement onkeyup. Ces deux fonctions fonctionnent bien sur leur propre, cependant, si le masque insère un tiret et puis je quitte la zone de texte, l'événement onchange ne se déclenchera pas.événement onkeyup arrête onchange événement ajax de tir

Quelqu'un a une idée de pourquoi? Ma conjecture est qu'en changeant la valeur avec la fonction de masque, la boîte de texte ne pense plus que quelque chose a changé.

Merci

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

} 

Répondre

3

Oui, vous avez raison, le onchange ne se déclenche pas si vous changez la valeur de la boîte en utilisant javascript. Vous devez donc appeler le validateSSN() manuellement à l'intérieur de votre mask.

+1

Après avoir lu votre réponse, la rouages ​​rouillés dans ma tête a commencé à grincer et je me souviens d'un problème comme celui-ci avant. Je ne peux pas appeler mon validateSSN() dans ma fonction de masque, parce que mon AJAX affiche des messages, et je veux seulement qu'il s'affiche quand ils quittent le champ. Donc, un changement rapide de onchange à onblur a résolu le problème! Je ne sais pas pourquoi je n'y avais pas pensé avant, je devine juste trop de rouille .... Merci! – Limey

1

JavaScript Fonction:

<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> 

écrire ce code dans le corps Tag:

<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"> 

Cela se traduira par ce format: 797-97-9797