2010-05-17 7 views
1

J'ai un ASP: TextBox avec ASP: RegularExpressionValidator pour valider s'il s'agit d'un nombre. Évidemment, un événement onchange sera attaché à cette zone de texte lors du rendu. De plus, j'ajoute un événement change à $ (document) .ready pour effectuer un calcul lorsque la valeur est modifiée.Déclencher l'événement de modification d'une zone de texte dans jQuery

<asp:TextBox id="myText" runat="server" /> 
<asp:regularexpressionvalidator id="myRev" ControlToValidate="myText" runat="server">*</asp:regularexpressionvalidator> 

$(document).ready(function(){ 
    $('[id$=myText]').bind('change',function(){ 
      //do something 
    }).change();  //force the change event at the very beginning 
}); 

Ma fonction sera exécutée plus tard que le fichier .net généré en raison de l'heure d'enregistrement. Mais le asp.net js jette une erreur. Je traçais dans les js:

function ValidatorOnChange(event) { 
     ... 
    } 

et a constaté que tous event.fromElement, event.toElement, event.srcElement sont nuls qui fait l'exception. Est-ce que j'ai fait quelque chose de mal? Des solutions? Merci.

EDIT

Il est prouvé être un bug de MS, fonctionne bien dans VS2010 ASP.NET 4.

+0

Avez-vous besoin du gestionnaire .net pour fonctionner, ou simplement du gestionnaire jQuery? –

+0

@Nick Craver: $ (XXX) .change() déclenchera tous ses événements de changement. Mais pourquoi le js généré donne une erreur? Je pense qu'il devrait être déclenché correctement. –

+0

Au lieu de '$ ('[id $ = myText]')' use '$ ('# myText')' – Pointy

Répondre

4

Y compris le point de Pointy (je me craque) sur ID, vous pouvez ré-écrire comme ceci:

$(function(){ 
    $('#<%=myText.ClientID%>').change(function() { 
    //stuff 
    }).triggerHandler('change'); 
}); 

Sans voir exactement comment votre autre événement est attaché, .triggerHandler() serait ma meilleure suggestion, que l'événement ne pas en bulle pour la capture par le gestionnaire .Net.

+0

Ne fonctionne pas, je pense que triggerHandler() est le même que trigger() dans ce numéro. L'événement de modification généré par .net sera déclenché dans les deux. triggerHandler() ne déclenchera pas les événements du navigateur, mais le .net js n'est pas un événement du navigateur. –

+0

lol 12 plus à faire – Anurag

+0

@Danny - Comme il est lié directement à l'élément, vous devez utiliser l'approche ici pour déclencher l'événement change: http://stackoverflow.com/questions/168596/programmatically-triggering-events -in-javascript-for-ie-using-jquery –

0

Faites vos calculs en fonction et l'appeler sur l'événement prêt au lieu de déclencher un changement:

$(document).ready(function(){ 
    $('[id$=myText]').bind('change',function(){ 
      doCalc(); // or doCalc(this) or whatever you need 
    }); 
    doCalc(); 
}); 
+0

Sans connaître l'intérieur de cette méthode qui est un plan long, et il peut être fait * beaucoup * plus court: '$ ('[id $ = myText]'). Change (doCalc);' –

+0

Oui, point valide, habituellement je faites le style plus court, concentré sur le point principal maintenant pour le rendre plus visible. – andr

+0

Je me demande pourquoi l'événement est déclenché de manière incorrecte. J'utilise la grammaire correcte. –

Questions connexes