web-dev-qa-db-fra.com

Appelez l'événement Javascript onchange en modifiant par programme la valeur de la zone de texte

le problème auquel je suis confronté est le suivant:

  • J'ai une zone de texte pour une plage de dates à côté d'un contrôle de calendrier. 
  • Lorsque l'utilisateur sélectionne une date dans le calendrier, il la remplit dans la zone de texte.
  • Lorsque cela se produit, je souhaite activer une fonction javascript. Toutefois, l'événement "onchange" ne semble pas se produire.

J'aimerais idéalement pouvoir ajouter l'événement en tant qu'attribut à la zone de texte, par exemple:

txtCreateDate.Attributes.Add("onchange", string.Format("JSfunction({0},'{1}');", arg1, arg2));

plus d'infos: La date est entrée dans la zone de texte en c #. Le contrôle de calendrier a un gestionnaire d'événements sur la page. Lorsqu'une date est sélectionnée, le gestionnaire d'événements insère la date dans la zone de texte. J'ai essayé de définir le focus sur la zone de texte à ce stade, puis de placer un attribut onBlur sur la zone de texte, mais la zone de texte ne semble jamais avoir le focus.

Je suppose que je pourrais directement appeler la fonction javascript en faisant ClientScript.RegisterClientScriptBlock ou quelque chose du genre, mais cela semble négligé et ne fonctionne jamais comme je le voulais.

11
matthew_360

Vous interprétez mal ce que l'événement onchange fait lorsqu'il est appliqué à une zone de texte. Il ne se déclenchera pas tant qu'il n'aura pas perdu la concentration ou que vous n'aurez appuyé que sur Entrée. Pourquoi ne pas activer la fonction à partir d’un échange sur la sélection qui remplit la zone de texte?

Consultez ici pour plus d'informations sur l'événement onchange: w3schools

8
jacobangel

C'est une vieille question, et je ne sais pas si cela va aider, mais j'ai pu programmer par programme un événement en utilisant:

if (document.createEvent && ctrl.dispatchEvent) {
    var evt = document.createEvent("HTMLEvents");
    evt.initEvent("change", true, true);
    ctrl.dispatchEvent(evt); // for DOM-compliant browsers
} else if (ctrl.fireEvent) {
    ctrl.fireEvent("onchange"); // for IE
}
19
palswim

Vous pouvez déclencher l'événement simplement avec 

 document.getElementById ("elementID"). onchange (); 

Je ne sais pas si cela ne fonctionne pas sur certains navigateurs, mais cela devrait fonctionner sur FF 3 et IE 7+

8
SvenFinke

Onchange n'est déclenché que lorsque l'utilisateur entre quelque chose au clavier. Un possible solution de contournement pourrait être de focaliser d'abord le champ de texte puis de le changer.

Mais pourquoi ne pas récupérer l'événement lorsque l'utilisateur clique sur une date? Il doit déjà y avoir du javascript.

2
TheHippo

Votre population est du côté du serveur. L'utilisation de registerclientscript mettra le script au début du formulaire. Vous souhaiterez utiliser RegisterStartupScript (Block) pour que le script soit placé à la fin de la page en question.

Le premier essaie d'exécuter le script avant que la zone de texte n'existe dans le dom, le second l'exécutera après la création de cet élément de la page.

1
Tracker1

Vous pouvez essayer la bibliothèque Anthem .

1
Ehsan Khodarahmi

Vous pouvez le placer dans une classe différente, puis appeler une fonction. Cela fonctionne quand ajax refresh

$(document).on("change", ".inputQty", function(e) {

//Call a function(input,input);
});
0
Nicook