Associer du code javascript aux controles derivés

Description

Un des inconvenients des controles tout fait par microsoft est que, je trouve, ne posséde pas assez de fonctionnalité coté client.
Cette classe permet d'ajouter du code javascript associé aux evenements javascript du controle. Par exemple grace à cette class nous pouvons facilement ajouté du code javascript a l'evenement onclick du control bouton

pour ce faire il vous faut créer un nouveaubutton derivant de button

et ensuite dans la methode AddAttributesToRender faire comme cela :

Protected Overrides Sub AddAttributesToRender(ByVal writer As System.Web.UI.HtmlTextWriter)
MyBase.AddAttributesToRender(writer)

Dim isOnClickAttributsAdded As Boolean = False

Dim CodeJavascript As New Cyril.Controls.Utility.EcrireEvenementJavascript(writer, Me.UniqueID)

If Me.isOneClick = True Then
If isOnClickAttributsAdded = False Then
writer.AddAttribute("OnClick", "self.setTimeout('OnClick" & Me.UniqueID & "();' ,1);")
isOnClickAttributsAdded = True
End If

CodeJavascript.OnClick("document.getElementById('" & Me.UniqueID & "').disabled=true;")

End If

CodeJavascript.EcrireJavascript()

End Sub

vous avez un exemple concret pour un bouton ici : http://www.aspfr.com/code.aspx?ID=21560

Source / Exemple :


Imports System.ComponentModel
Imports System.Web.UI
Imports System.Web.UI.Webcontrols
Imports System.Web

Namespace Cyril
    Namespace Controls

                Public Class EcrireEvenementJavascript

                    Private _UniqueID As String
                    Private _Writer As System.Web.UI.HtmlTextWriter

                    ''' -----------------------------------------------------------------------------
                    ''' <summary>
                    ''' Contient toutes les lignes de codes
                    ''' pour chaque Evenement
                    ''' A un index est associé un evenement
                    ''' le numero de l'index est ecrit dans CodeEvenement
                    ''' 
                    ''' Chaque ligne de code est séparé par 
''' </summary> ''' <remarks> ''' </remarks> ''' <history> ''' [DURAND Cyril] 30/03/2004 Created ''' </history> ''' ----------------------------------------------------------------------------- Private aLignesCode(17) As String ''' ----------------------------------------------------------------------------- ''' <summary> ''' Un Array qui contient les codes des evenements ''' </summary> ''' <remarks> ''' </remarks> ''' <history> ''' [DURAND Cyril] 30/03/2004 Created ''' </history> ''' ----------------------------------------------------------------------------- Private CodeEvenement() As String _ = {"onAbort", "onBlur", "OnChange", _ "OnClick", "onDblclick", "onDragdrop", _ "onError", "onFocus", "onKeydown", _ "onKeypress", "onLoad", "onMouseOver", _ "onMouseOut", "onReset", "onResize", _ "onSelect", "onSubmit", "onUnload"} Private Enum NomCodeEvenement As Short onAbort = 0 onBlur = 1 OnChange = 2 OnClick = 3 onDblclick = 4 onDragdrop = 5 onError = 6 onFocus = 7 onKeydown = 8 onKeypress = 9 onLoad = 10 onMouseOver = 11 onMouseOut = 12 onReset = 13 onResize = 14 onSelect = 15 onSubmit = 16 onUnload = 17 End Enum ''' ----------------------------------------------------------------------------- ''' <summary> ''' Permet d'initialiser .... ''' </summary> ''' <param name="Writer"> Writer du Controle sur lequel ''' on veut modifier les parametres ''' </param> ''' <param name="UniqueID"> Identifieur unique du controle ''' pour pouvoir créer les fonctions javascript ''' </param> ''' <remarks> ''' </remarks> ''' <history> ''' [DURAND Cyril] 30/03/2004 Created ''' </history> ''' ----------------------------------------------------------------------------- Public Sub New(ByVal Writer As System.Web.UI.HtmlTextWriter, ByVal UniqueID As String) _UniqueID = UniqueID _Writer = Writer End Sub #Region "Evenement" ''' Chaque méthode permet d'ecrire une ligne de code ''' Dans les evenements choisis pour le controle Public Sub onAbort(ByVal LigneCode As String) aLignesCode(NomCodeEvenement.onAbort) &= "
" & LigneCode End Sub Public Sub onBlur(ByVal LigneCode As String) aLignesCode(NomCodeEvenement.onBlur) &= "
" & LigneCode End Sub Public Sub OnChange(ByVal LigneCode As String) aLignesCode(NomCodeEvenement.OnChange) &= "
" & LigneCode End Sub Public Sub OnClick(ByVal LigneCode As String) aLignesCode(NomCodeEvenement.OnClick) &= "
" & LigneCode End Sub Public Sub onDblclick(ByVal LigneCode As String) aLignesCode(NomCodeEvenement.onDblclick) &= "
" & LigneCode End Sub Public Sub onDragdrop(ByVal LigneCode As String) aLignesCode(NomCodeEvenement.onDragdrop) &= "
" & LigneCode End Sub Public Sub onError(ByVal LigneCode As String) aLignesCode(NomCodeEvenement.onError) &= "
" & LigneCode End Sub Public Sub onFocus(ByVal LigneCode As String) aLignesCode(NomCodeEvenement.onFocus) &= "
" & LigneCode End Sub Public Sub onKeydown(ByVal LigneCode As String) aLignesCode(NomCodeEvenement.onKeydown) &= "
" & LigneCode End Sub Public Sub onKeypress(ByVal LigneCode As String) aLignesCode(NomCodeEvenement.onKeypress) &= "
" & LigneCode End Sub Public Sub onLoad(ByVal LigneCode As String) aLignesCode(NomCodeEvenement.onLoad) &= "
" & LigneCode End Sub Public Sub onMouseOver(ByVal LigneCode As String) aLignesCode(NomCodeEvenement.onMouseOver) &= "
" & LigneCode End Sub Public Sub onMouseOut(ByVal LigneCode As String) aLignesCode(NomCodeEvenement.onMouseOut) &= "
" & LigneCode End Sub Public Sub onReset(ByVal LigneCode As String) aLignesCode(NomCodeEvenement.onReset) &= "
" & LigneCode End Sub Public Sub onResize(ByVal LigneCode As String) aLignesCode(NomCodeEvenement.onResize) &= "
" & LigneCode End Sub Public Sub onSelect(ByVal LigneCode As String) aLignesCode(NomCodeEvenement.onSelect) &= "
" & LigneCode End Sub Public Sub onSubmit(ByVal LigneCode As String) aLignesCode(NomCodeEvenement.onSubmit) &= "
" & LigneCode End Sub Public Sub onUnload(ByVal LigneCode As String) aLignesCode(NomCodeEvenement.onUnload) &= "
" & LigneCode End Sub #End Region ''' ----------------------------------------------------------------------------- ''' <summary> ''' Permet d'ecrire le code Javascript au controle ''' Cette methode genere un code javascript <> ''' par controle et se place juste avant celui ci ''' </summary> ''' <remarks> ''' /!\ a optimisé ''' </remarks> ''' <history> ''' [DURAND Cyril] 30/03/2004 Created ''' </history> ''' ----------------------------------------------------------------------------- Public Sub EcrireJavascript() ''' On Ecrit le debut du code javascript _Writer.WriteLine("<script language=javascript>") ''' On Effectue une boucle pour chaque evenement For i As Integer = 0 To 17 ''' On Ecrit du code seulement s'il y en a If Not aLignesCode(i) = "" Then ''' On Ecrit le nom de la function javscript ''' en fonction du nom de l'evement declenche ''' et de l'identificateur unique du controle concerné _Writer.WriteLine("function " & CodeEvenement(i).ToString & _UniqueID & "(){") ''' A chaque ligne de code on ecrit la ligne de code ''' Verifier si il n'y a pas d'erreur sur certains char For Each s As String In Split(aLignesCode(i), "
") '''On Ecrit seulement si la ligne ''' n'est pas vide .... If Not s = "" Then _Writer.WriteLine(s) End If Next ''' On Ferme la fonction javascript avec ''' l'accolade fermante _Writer.WriteLine("}") End If Next ''' On Ferme le bloc de script _Writer.WriteLine("</script>") End Sub End Class

Conclusion :


Bug :
- Il me reste encore à integrer certaines chose dans la classe comme la vérification pour savoir si j'ai deja ecrit ou pas dans l'attribut en cours

- Il manque une methode pour tout simplement generer une fonction javascript sans association avec un evenement du controle

- Pour l'instant les evenements se font sur tout les controles meme sur ceux ou l'evenement est impossible par exemple par exemple le dragdrop sur une image qui n'a alors aucun sens voir : http://www.commentcamarche.net/javascript/jsevent.php3

J'ai fournit dans le zip une assembly contenant egalement mes controles dérivé et le code avec le code d'un bouton

Pour avoir une version de l'assembly la plus recente veuillez consulter cette adresse : http://jesusonline.free.fr/Cyril/

Hesiter pas à me mettre un commentaire bon ou mauvais du moment qu'il est constructif et me noter, si vous ameliorer le truc dites le moi

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.