2 cliques sur DropDownList?

Michelk12_8898
2 cliques sur DropDownList?

Bonjour,

Je savais que j'allais revenir un jour.
Voilà que j'utilise pour ma première fois la "asp:DropDownList" et me rend compte que l'utilisateur doit cliquer deux fois de suite dessus pour la dérouler. Un peu comme si le premier clique donnait le focus et le 2ème l'ordre de dérouler.

Quelqu'un a-t-il déjà été confronter à ce détail casse-pied?

Michel

Michelk12_8898
DropDownList - Précision

Hello,

Voilà le problème résolu si je retire cette partie de code :

this.MyDropDownList.Attributes.Add("onfocus", "this.className='focus';");
this.MyDropDownList.Attributes.Add("onblur", "this.className='normal';");

Mais cela m'embête de le retirer :?

fredericmazue

bonsoir

Quote:

Voilà que j'utilise pour ma première fois la "asp:DropDownList" et me rend compte que l'utilisateur doit cliquer deux fois de suite dessus pour la dérouler. Un peu comme si le premier clique donnait le focus et le 2ème l'ordre de dérouler.

Mais qu'est-ce que tu nous racontes là ?

Quote:

Quelqu'un a-t-il déjà été confronter à ce détail casse-pied?

Non..
J'ai même essayer de le produire sans y arriver...

Quote:

Voilà le problème résolu si je retire cette partie de code :

Quelle partie de code. On savait qu'il y avait ce code dans la question initiale ?
J'aimerais comprendre. Onblur en VB .Net ....
Onblur c'est du Javascript si je ne m'abuse. Ca me rappelle une autre de tes questions dans laquelle au départ tu n'avais pas dit (comme ici d'ailleurs) que tu mettais du Javascript partout dans tes pages.
Tu sais, sois dit sans vouloir te froisser, tu devrais regarder un peu ce qu'on peut faire en ASP.Net avec les évenements, les classes, le Framework et tout et tout. Bref tout ce qu'on peut faire de la manière prévue pour le faire.
Ca vaut le détour ;)

Je trouve vraiment dommage d'utiliser un outil aussi puissant que ASP.Net pour tout faire en Javascript. Et puis au final tu as des problèmes. Comme le problème de rechargement de page d'une de tes autres questions. Alors que normalement si tu utilises bien ASP, le pb ne se pose pas.

D'ailleurs pour cette question je t'avais parlé de Session et tu as fait ça en Javascript... Mais la session ça existe en ASP aussi ;)

Michelk12_8898

fredericmazue wrote:
J'aimerais comprendre. Onblur en VB .Net ....
Onblur c'est du Javascript si je ne m'abuse. Ca me rappelle une autre de tes questions dans laquelle au départ tu n'avais pas dit (comme ici d'ailleurs) que tu mettais du Javascript partout dans tes pages.

Tu sais, sois dit sans vouloir te froisser, tu devrais regarder un peu ce qu'on peut faire en ASP.Net avec les évenements, les classes, le Framework et tout et tout. Bref tout ce qu'on peut faire de la manière prévue pour le faire.
Ca vaut le détour ;)

Je trouve vraiment dommage d'utiliser un outil aussi puissant que ASP.Net pour tout faire en Javascript. Et puis au final tu as des problèmes. Comme le problème de rechargement de page d'une de tes autres questions. Alors que normalement si tu utilises bien ASP, le pb ne se pose pas.

D'ailleurs pour cette question je t'avais parlé de Session et tu as fait ça en Javascript... Mais la session ça existe en ASP aussi ;)

Hello Fred :oops:,

Après lecture de ton message, c'était décidé : j'abandonne l'informatique et j'ouvrirais une pizzeria dans mon village. :roll:
Puis ce matin (la nuit porte conseil) je me suis dit "fait du C et scripts shell, il n'y a que cela que tu maîtrises correctement" :?

Puis je relis ton post ce matin et j'ai lu que tu ne voulais pas me froisser : merci!!

J'en suis revenu au problème que j'avais déjà oublié et me permets une question histoire d'en apprendre un peu plus à ce sujet.
Cela :

<script language="javascript">
    document.getElementById("mot_actuel").value = "<%=Session["mot_actuel"]%>";
</script>
Beurk!!

J'imagine qu'il est préférable de tapoter :
<% if (Session["mot_actuel"] != null) mot_actuel.Text = Session["mot_actuel"].ToString(); %>

Cela me donne le même résultat pour un simple TextBox.
Mais qu'une seule méthode semble fonctionner si le TextBox "mot_actuel" à la propriété TextMode à Password.

Enfin, pour éviter :
this.MyTextBox.Attributes.Add("onfocus", "this.className='focus';");

Je ne vois que :
<asp:TextBox ID="MyTextBox" runat="server" onFocus="this.className='focus';"...

L'éditeur de Visual Web me souligne alors "onFocus" : "L'attribut 'onFocus' n'est pas un attribut valide de l'élément 'TextBox'."

Existe-t-il une autre méthode qui plait à tout le monde?

Merci et si quelqu'un d'autre que Fred veut participer, je serrais ravi.

Michel

fredericmazue

Hello :)

Quote:

Après lecture de ton message, c'était décidé : j'abandonne l'informatique et j'ouvrirais une pizzeria dans mon village

Allons bon. Mais non :)

Quote:

Puis je relis ton post ce matin et j'ai lu que tu ne voulais pas me froisser : merci!!

On n'est pas là pour s'embêter mutuellement n'est-ce pas ? :)

Quote:

J'imagine qu'il est préférable de tapoter :

Oui mais même comme ça, je pense que tu peux faire mieux.
Je renouvelle donc ma suggestion. Essaie de te familiariser mieux avec ASP .Net, surtout avec le concept de classe .Net associée à une page Web et tu verras les possibilités qui s'offrent à toi. C'est puissant.

Quote:

L'éditeur de Visual Web me souligne alors "onFocus" : "L'attribut 'onFocus' n'est pas un attribut valide de l'élément 'TextBox'."

Existe-t-il une autre méthode qui plait à tout le monde?

Plaire à tout le monde est quelque chose de difficile ;)
Mais une autre méthode oui ça existe. Encore une fois (pardonne moi, c'est toujours sans vouloir te froisser, d'aucune manière) en connaissant mieux ASP .Net tu verras qu'une page dispose de l'évènement OnLoad dans lequel tu feras les choses appropriés, par exemple appeler la méthode SetFocus depuis la classe .Net Page associée à ta page ou la méthode SetFocus d'un des composants telle que la DropDownList qui trouve elle aussi une correspondance classe .Net -- page Web

Oublie les "onfocus" à la JavaScript et regarde le travail du Framework qui remplace tout ça. Tu ne seras pas déçu au final :)

Quote:

Merci et si quelqu'un d'autre que Fred veut participer, je serrais ravi.

Je suis viré, c'est ça ? ;)

fredericmazue

Salut, c'est encore moi ;)

Ce matin je n'avais pas beaucoup de temps, alors je n'ai pas été très explicite. Là je vais essayer de t'aider plus concrètement. Un des gros points fort de ASP .Net 2.0 c'est qu'il découple la conception des pages de la logique. Donc tu n'as normalement pas besoin de mettre du Javascript dans tes pages. C'est le framework qui se charge de générer le Javascript pour toi. Pour ça le Framework voit une page en deux entités. D'abord la page elle même (balise HTML, etc) et une classe .Net qui dérive de la classe System.Web.UI.Page.

Quand tu crées une page Web sous Visual, celui-ci te génère d'un coup la pagesWeb et le code de la lcasse (en VB ou C# comme tu veux). Pour te rendre ça plus concret on va prendre un exemple. Tu veux que dans ta page (default.aspx) il y ait 3 contrôles. 2 TextBox et un Bouton. Tu veux qu'au chargement de la page la deuxième TextBox ait le focus et que si tu cliques le bouton, le focus passe à la première TextBox.
C'est tout simple . D'abord tu déposes les contrôles sur la page web. Ca te donne ceci comme code:

%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
        <asp:Button ID="Button1" runat="server" Text="Button" /></div>
    </form>
</body>
</html>

Là dedans, pas de Javascript du tout ainsi que tu le vois.

Maintenant tu vas dans le fichier default.aspx.vb (si tu travailles avec Visual Basic). C'est le fichier qui contient le code de la classe .Net associée à la page. Et là tu ajoutes deux gestionnaires d'événements. Un pour le chargement de la page, un autre pour le click du bouton. Pour faire ça utilise les boîtes listes déroulantes juste au dessus de l'éditeur.
Après tu n'as qu'à ajouter un peu de code Visual Basic pour avoir ceci:

[code)
Partial Class _Default
Inherits System.Web.UI.Page

Protected Sub form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles form1.Load
SetFocus(TextBox2)
End Sub

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
TextBox1.Focus()
End Sub
End Class
[/code]

en fait les deux seules lignes ajoutées manuellement sont

SetFocus(TextBox2)
TextBox1.Focus()

Comme tu vois c'est tout simple, exit Javascript dans les pages, et ça marche ;)

Voilà en espérant avoir un peu clarifié ASP .Net 2.0 et t'avoir aidé