2010-04-21 8 views
0

J'ai le code suivant dans l'événement OnChange() pour un champ.Définition du champ après l'alerte javascript ne fonctionnant pas dans MS CRM

alert("alert text"); 
crmForm.all.fieldname.SetFocus(); 

La page se comporte comme l'appel SetFocus n'est même pas là.

Quelqu'un sait pourquoi?

EDIT: J'ai également essayé ce qui suit en vain.

crmForm.all.fieldname.Focus(); 
crmForm.all.fieldname.focus(); 
alert("alert text", function() { crmForm.all.fieldname.SetFocus()}); 
+0

utilisation: 'document.forms [ 'FormName'] [ 'éléments de fieldName'] concentrer();' 'ou document.getElementById (id) .focus().. ; 'si votre champ a un jeu d'identifiants ou le framework JS de votre choix jQuery: '$ ('#' + id) .focus();' – scunliffe

+0

est-ce que '.focus();' ou toute autre variante fonctionne si vous ignorez 'alert();'? – scunliffe

+0

Ce n'est pas le cas. Apparemment, Microsoft remplace l'événement focus() dans CRM. – mwright

Répondre

2

Il s'avère que la conservation du focus sur le champ à partir duquel la méthode OnChange() a été appelée est interrompue dans CRM 4 sans le cumul le plus récent. C'est un problème connu avec un Microsoft KB article.

Pour atteindre l'illusion de conserver l'accent sur le domaine simplement mis l'accent sur un champ différent sur le même onglet d'abord, puis réattribuer le focus sur le champ à partir duquel l'événement OnChange() a été appelé comme ceci:

alert("alert text"); 
crmForm.all.some_other_field_on_the_same_tab.SetFocus(); 
crmForm.all.fieldname.SetFocus(); 
+0

+1 pour trouver et poster la réponse ici! Vous pouvez accepter votre propre réponse après 48 heures. Je vais faire mien un wiki communautaire et le laisser reposer là pour référence. – Tomalak

3

Dans le DOM, la fonction de mettre l'accent sur un élément est appelé focus(), non SetFocus().

+0

Cela peut être correct pour javascript en dehors de MS CRM mais cela ne fonctionne pas pour l'événement OnChange dans MS CRM. – mwright

+0

à partir de votre exemple de code, est 'crmForm.all.fieldname' une référence à votre domaine dans le DOM? Si c'est le cas, cela devrait fonctionner, sinon, qu'est-ce que c'est? – scunliffe

+0

le "fieldname" est le nom de l'attribut associé à l'entité. Je suppose que quand il est chargé sur le formulaire qui est le nom de l'élément DOM, cependant, lorsqu'il est modifié pour utiliser le focus suggéré() après l'alerte, le comportement n'a pas changé. – mwright

2

Il semble que le même problème existe dans CRM 2011 - événement lorsque vous travaillez avec Xrm.Page.
La solution fonctionne encore:

Xrm.Page.getControl("name").setFocus(true); 
Xrm.Page.getControl("TheFieldYouReallyWantToFocus").setFocus(true); 
+0

Si vous ne définissez pas de boîte d'alerte, avez-vous toujours le problème? – Daryl