0 votes

Réinitialisation/effacement des données du formulaire, mise au point du bouton radio

Je suis nouveau dans tout cela, alors s'il vous plaît soyez gentil! D'accord, actuellement, j'ai le scénario suivant.

J'ai trois méthodes de recherche de détails de produits :

  1. Une liste déroulante en cascade (ddlbuyer, ddlSub, ddlProd) et un bouton radio associé (radProd)

  2. Une zone de texte autocomplete qui recherche des informations sur les produits (txtPrdAC)

  3. Une recherche de liste de produits où un utilisateur entre le nombre d'articles qu'il souhaite voir (txtHowMany) puis spécifie la sous-catégorie qu'il souhaite voir (radTopx)

Idéalement, j'aimerais avoir la situation suivante.

Un utilisateur ne peut utiliser qu'une des méthodes de recherche de produits énumérées ci-dessus. S'ils cliquent sur le premier ddl, toutes les données éventuellement présentes dans les zones de texte sont effacées. De même, s'ils cliquent sur le txtPrdAC ou le txtHowMany, toutes les informations présentes dans la liste ddl sont effacées et reviennent à leur valeur par défaut d'origine.

J'aimerais faire cela dans le code-behind c# et jusqu'à présent j'ai le code suivant qui fonctionne... plus ou moins! Eh bien, cela défini du moins le focus sur le bouton radio.

 ddlProd.Attributes.Add("onchange", "return SetRadioFocus('" 
                                   + radBuyer.ClientID + "');");   
 radTopx.Attributes.Add("onclick", "return SetRadioFocus('" 
                                   + radTopx.SelectedItem + "');");   
 tbxProdAC.Attributes.Add("onclick", "return SetRadioFocus('" 
                                   + radProd.ClientID + "');");   

 ClientScript.RegisterClientScriptBlock(this.GetType(), "MyScript", @"   
          function SetRadioFocus(target)   
          {                    
            document.getElementById(target).checked = true;
          }", true);

Cependant, il me manque encore certains aspects, comme effacer les zones de texte et/ou la liste déroulante. Encore une fois, désolé pour mon ignorance, mais cela m'a dérouté. Merci pour toute aide qui pourrait venir à ma rescousse.

0voto

Dr. Wily's Apprentice Points 5805

Je peux imaginer qu'une solution complète à ce problème pourrait potentiellement être assez complexe, mais une solution simple qui, je pense, ferait ce que vous demandez pourrait être la suivante :

    ddlProd.Attributes.Add("onchange", "ResetDefaults('"+ddlProd.ClientID+"'); SetRadioFocus('"
                                      + radBuyer.ClientID + "');");
    radTopx.Attributes.Add("onclick", "ResetDefaults('"+radTopx.ClientID+"'); SetRadioFocus('"
                                      + radTopx.SelectedItem + "');");
    tbxProdAC.Attributes.Add("onclick", "ResetDefaults('"+tbxProdAC.ClientID+"'); SetRadioFocus('"
                                      + radProd.ClientID + "');");

    ClientScript.RegisterClientScriptBlock(this.GetType(), "MyScript", @"
      function ResetDefaults(exclude)
      {
        if(exclude != '" + ddlProd.ClientID + @"') document.getElementById('" + ddlProd.ClientID + @"').value = null;
        if(exclude != '" + txtPrdAC.ClientID + @"') document.getElementById('" + txtPrdAC.ClientID + @"').value = "";
        if(exclude != '" + txtHowMany.ClientID + @"') document.getElementById('" + txtHowMany.ClientID + @"').value = "";
      }
      function SetRadioFocus(target)   
      {
        document.getElementById(target).checked = true;
      }", true);

Ceci étant dit, je ne suis pas entièrement sûr si c'est exactement le comportement que vous souhaitez. Chaque fois que l'utilisateur clique sur l'un de ces champs de texte, les valeurs de tous les autres contrôles seront effacées, donc je ne vois pas comment l'utilisateur pourrait remplir le formulaire entier à moins que ces champs ne soient mutuellement exclusifs et que l'utilisateur ne soit censé entrer des données que dans l'un d'eux. Sinon, vous devrez peut-être envisager de peaufiner cette logique pour effacer uniquement les valeurs des contrôles dans certaines conditions.

De plus, vous pourriez préférer utiliser l'événement onblur au lieu de onclick. L'utilisateur pourrait déplacer le focus sur les contrôles en appuyant sur la touche de tabulation au lieu de cliquer dessus, auquel cas je ne pense pas que l'événement onclick sera déclenché. L'événement onblur est déclenché chaque fois que le focus quitte le contrôle. Vous pourriez également avoir besoin d'ajouter du code JavaScript supplémentaire qui peut détecter si l'utilisateur a réellement apporté des modifications à la valeur du contrôle, ou s'ils se sont simplement concentrés sur le contrôle avant de le quitter.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X