IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

Déclaration d'events à la volée et variables


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 186
    Par défaut Déclaration d'events à la volée et variables
    Bonjour, mon titre n'est pas explicite je le conçois, mais je vais expliquer clairement mon problème.

    Dans une fonction javascript, je crée des inputs, à la volée en fonction des paramètres donnés (objet).

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    {fields:[
    			{
    				privateName:'projectPublicName',
    				publicName:'Nom du projet (public)',
    				type:'text',
    				onclick:function(event,inputs,checkspan){
    					console.log(event);
    					console.log(inputs);
    					console.log(checkspan);
    					var iCode = (event.keyCode ? event.keyCode : event.which);
    					if(iCode == 13){
    						submitCreateNewProject();
    					}
    				},
    				check:true
    			},
    			{
    				privateName:'projectPrivateName',
    				publicName:'Nom du projet (private)',
    				type:'text',
    				check:true,
    				onkeypress:function(event,inputs,checkspan){
    					console.log(event);
    					console.log(inputs);
    					console.log(checkspan);
    					var iCode = (event.keyCode ? event.keyCode : event.which);
    					if(iCode == 13){
    						submitCreateNewProject();
    					}
    				}
    			}
    		]}
    je crée des input de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    for(var i=0;i<oParams.fields.length;i++){
    		var oTmpInput = oParams.fields[i];
    		if(undefined === typeof(oTmpInput.privateName) || undefined === typeof(oTmpInput.publicName) || undefined === typeof(oTmpInput.type))continue;
     
    		var eTmpInput = (oTmpInput.type !== 'textarea')?document.createElement('input'):document.createElement('textarea');
    		$(eTmpInput).attr({id:oTmpInput.privateName,name:oTmpInput.privateName,'iter':i});
    		if(oTmpInput.type !== 'textarea')$(eTmpInput).attr({type:oTmpInput.type});
     
    		aAllInputElements.push(eTmpInput);
    		aAllInputObjects.push(oTmpInput);
    	}
    Ensuite je stocke les input (éléments) et leur objets respectifs dans deux tableaux.

    Jusqu'ici pas de problèmes.

    Dans un deuxième temps je parcours mon tableau contenant les éléments input créés afin de leur attribuer des events (ceux définis dans l'objet).

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    for(var i=0;i<aAllInputElements.length;i++){
    	var oInput = aAllInputObjects[i]; //objets définit en paramètres
    	var eTmpInput = aAllInputElements[i]; //input créés.
     
    	if('function' === typeof(oInput.onkeypress)){
    		$(e).keypress(
    			function(event){
    				console.log(oInput);
    				oInput.onkeypress(event,aAllInputElements);
    			}
    		);
    	}
    }
    Et c'est ici que ça plante : le console.log affiche le dernier objet contenu dans aAllInputObjects, pour n'importe quel input

    J'ai tenté de mettre un attribut "iter" contenant l'indice de l'objet sur l'input.
    Et ensuite faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $(e).keypress(
    			function(event){
    				var oInput = aAllInputObjects[parseInt($(this).attr('iter'))];
    				oInput.onkeypress(event,aAllInputElements);
    			}
    		);
    La ça marche mais pas très propre je trouve.

    Voilà pour l'explication de mon problème, donc si quelqu'un à une solution, je suis impatient de la voir !

    Merci d'avance pour vos réponses.

    Ps : la fonction entière pour ceux qui veulent plus de code http://dl.free.fr/t8GepPKcy

  2. #2
    Membre expérimenté Avatar de sayari.dev
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2010
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2010
    Messages : 142
    Par défaut
    Essaye celui-ci


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    for(var i=0;i<aAllInputElements.length;i++){
    	eval('var oInput_' + i + ' = aAllInputObjects[i]'); //objets définit en paramètres
    	var eTmpInput = aAllInputElements[i]; //input créés.
     
    	if('function' === typeof(oInput.onkeypress)){
    		$(e).keypress(
    			function(event){
    				console.log(oInput);
    				eval('oInput_' + i + '.onkeypress(event,aAllInputElements)');
    			}
    		);
    	}
    }

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 186
    Par défaut
    Non ça ne marche pas... L'erreur qui se produit c'est que pour n'importe quel input la valeur de i correspondra à la taille du tableau.

    pour mon exemple (avec deux inputs): oInput_2 is not defined

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par Neilime05 Voir le message
    L'erreur qui se produit c'est que pour n'importe quel input la valeur de i correspondra à la taille du tableau.
    Voir la : http://javascript.developpez.com/faq...lick.dynamique
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 186
    Par défaut
    Oui la solution proposé par la faq revient à la même chose que ça

    J'ai tenté de mettre un attribut "iter" contenant l'indice de l'objet sur l'input.
    Et ensuite faire ceci :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $(e).keypress(
    			function(event){
    				var oInput = aAllInputObjects[parseInt($(this).attr('iter'))];
    				oInput.onkeypress(event,aAllInputElements);
    			}
    		);
    Mais je cherche justement une solution plus propre.

Discussions similaires

  1. Modifier un event à la volée
    Par MasterMic dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 11/07/2005, 13h30
  2. [DB2] Ordre de déclaration des variables
    Par Fatah93 dans le forum DB2
    Réponses: 1
    Dernier message: 04/05/2005, 17h18
  3. déclaration de variables de 16, 32 et 128 bits
    Par samipate dans le forum C++
    Réponses: 10
    Dernier message: 30/12/2004, 22h33
  4. [FLASH MX2004] Déclaration de variables sous flash mx
    Par softyClochette dans le forum Flash
    Réponses: 4
    Dernier message: 29/11/2004, 16h11
  5. [debutant][Portée] Déclaration de variable .....
    Par Slein dans le forum Langage
    Réponses: 4
    Dernier message: 07/05/2004, 10h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo