Les champs cachés dans la fenêtre enfant sont-ils inaccessibles depuis la fenêtre parent?

StackOverflow https://stackoverflow.com/questions/199127

  •  11-07-2019
  •  | 
  •  

Question

J'ai un formulaire asp.net qui contient des champs. Lorsque j'accède à cette fenêtre, mes fonctions javascript peuvent accéder aux champs via le DOM à l'aide de la méthode getElementById () et lorsque je postpack sur le serveur, je reçois les mises à jour effectuées par le client.

Toutefois, lorsque je lance le formulaire en tant que fenêtre enfant à l'aide du contrôle RadWindow de Telerik, le javascript ne peut pas accéder aux champs masqués du formulaire. Au lieu de cela, je suis nul.

Mes questions sont les suivantes:

  1. Sont des champs cachés sur une fenêtre enfant non accessible lorsque la fenêtre est lancé à partir d'un formulaire parent asp.net?
  2. Quelqu'un a-t-il tenté cette opération avec des commandes Telerik et rencontré des problèmes?

MODIFIER Craig a souligné que l'identifiant peut être différent. Deux questions supplémentaires alors:

  1. Pouvez-vous vous assurer que l'identifiant que vous affectez au serveur est réellement utilisé?
  2. Utiliser getElementByName () est-il un meilleur mécanisme pour accéder aux éléments DOM?
Était-ce utile?

La solution

Pour obtenir l'ID de votre contrôle asp.net, procédez comme suit:

<%= theControl.ClientID %>

getElementByName n'est pas aussi couramment utilisé que getElementById. L'attribut ID est supposé être unique pour chaque élément de la page, alors que l'attribut name peut être dupliqué.

Autres conseils

Il est tout à fait possible que l'ID de l'élément ne soit pas ce que vous pensez. Vérifiez la page rendue et voyez si l'ID est là. Je suppose que la page se voit attribuer un identifiant différent, car elle est rendue dans un autre contrôle.

Si tel est le cas, vous pouvez demander au formulaire de rendre un script renvoyant l'ID d'élément en accédant à l'ID client des contrôles.

David, je vous adresse cette réponse car j'ai constaté le même problème dans mon code et la seule solution RÉELLE que j'ai trouvée était de prendre en charge l'option "OnClick". fonctionner à deux endroits ... Dans mon cas, j’utilisais PetersDatePackage, mais c’était sur une bande RAD Telerik.

Dans mon cas, le contrôle se trouvait sur une page .ascx et le code JS était le suivant:

function OnIncidentDateChange(ctrl, dtDate, bErr)
{
    var weekday = new Array(7);
    weekday[0] = "Sunday";
    weekday[1] = "Monday";
    weekday[2] = "Tuesday";
    weekday[3] = "Wednesday";
    weekday[4] = "Thursday";
    weekday[5] = "Friday";
    weekday[6] = "Saturday";

    <%=LabelDayOfWeek.ClientID %>.innerText = weekday[dtDate.getDay()];
}

Mais cela ne suffisait pas. Je devais ajouter CE code à ma page parente. La page contenant les commandes de la bande Telerik.

// Dummy function?
function OnIncidentDateChange()
{
}

Une fois que j'ai fait ça, ça a fonctionné ...

Je ne suis pas sûr de savoir pourquoi, à vrai dire, et cela n’a aucun sens pour moi, ce n’est peut-être un problème avec le paquet PDP ...

J'utilise getElementsByName pour les cases à cocher du même groupe.

En ce qui concerne l'ID du contrôle, TonyB a la bonne idée, mais assurez-vous de faire référence à la propriété ClientID dans le gestionnaire d'événements PreRender, car si vous le faites trop tôt dans le cycle de vie de la page, il ne sera pas encore disponible. .

Est-il possible que javascript tente d'obtenir une référence au champ masqué avant que RadWindow ne l'ait chargé? Je pense avoir déjà rencontré ce problème auparavant et que j'ai dû utiliser setTimeout pour résoudre le problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top