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 :

Fonction avec définition de variable dynamique


Sujet :

jQuery

  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 213
    Par défaut Fonction avec définition de variable dynamique
    Bonjour à tous,

    afin d'optimiser un petit code, je me pose une question : est-il possible de rendre dynamique le noms des variables d'une fonction.
    Par exemple, si j'ai la fonction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $(function () {
    $('#suppr_actif_1').click(function() {$('#id_photo_1').val('');});
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $(function (x) {
    $('#suppr_actif_'+x).click(function() {$('#id_photo_'+x).val('');});
    Vous voyez le principe ?
    je sais pas si c'est possible en JS

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    je ne vois pas de variable dynamique dans ton code ...
    juste une concaténation de string pour un sélecteur

    le plus simple encore est d'attribuer le clcik ainsi ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $('[id^="suppr_actif_"]).click(function() {
     idx= $(this).attr('id).replace(/[^0-9]/g,'');
    $('#id_photo_'+idx).val('');});
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Tu ne peux pas directement passer ce que tu veux en paramètre à la fonction telle que tu l'as écrite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $(function(x) {
      ...
    });
    Car quand tu passes une fonction à $(...), cette fonction reçoit l'objet jQuery comme paramètre. Ça sert notamment à éviter d'utiliser la variable $ quand le site repose sur plusieurs bibilothèques :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $(function(jQuery) {
       ...
    });
    En revanche, peut-être que le concept de fermeture (closure) va t'intéresser : en bref, il s'agit d'utiliser les variables du bloc de contexte supérieur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $(function() {
     
       var x = 1;
     
       (function() {
          $('#suppr_actif_' + x).click(function() {$('#id_photo_' + x).val(''); });
       }()); // la fonction est immédiatement invoquée
     
    });
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 213
    Par défaut
    Merci à vous 2 pour ce retour.
    Donc j'ai 2 solutions, soit les expressions régulières pour la solution de spaceFrog, soit de faire une boucle pour la solution de Wtilin comme par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $(function() {
       for(x = 1; x < 9; $i++){
       (function() {
          $('#suppr_actif_' + x).click(function() {$('#id_photo_' + x).val(''); });
       }()); // la fonction est immédiatement invoquée
    }
    });
    j'ai bien compris ?
    je ne suis pas très à l'aise avec jquery, mais ca donne envie de pousser l'apprentissage, c'est super intéressant.
    Merci encore pour votre aide

  5. #5
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    Je ne vois aucun intérêt à passer par une boucle, le selecteur permettant de cibler directement la collection

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $('[id^="suppr_actif_"])
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 213
    Par défaut
    je m'y suis peut-être mal pris, mais j'ai pas réussi à faire fonctionner le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $('[id^="suppr_actif_"]').click(function() {
    idx= $(this).attr('id').replace(/[^0-9]/g,'');
    $('#id_photo_'+idx).val('');
    $('#retour_photo_'+idx).removeAttr('style');});
    j'ai écris une bétise ?

  7. #7
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    regarde au moins en console pour vérifier la valeur de idx ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  8. #8
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 213
    Par défaut
    il manque un smiley 'honte sur moi' :o)
    j'ai pas encore les bons reflexes pour trouver les erreurs avec jquery.
    le problème était tout bête, il manquait la déclaration de variable.

    le code suivant marche à merveille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $('[id^="suppr_actif_"]').click(function() {
    var idx= $(this).attr('id').replace(/[^0-9]/g,'');
    $('#id_photo_'+idx).val('');
    $('#retour_photo_'+idx).removeAttr('style');});
    Un ENORME merci SpaceFrog pour ce coup de main.
    Je ne suis pas certain de pouvoir reproduire tout seul ce code, mais ca m'aide dans mon dev et optimise grandement mon code.


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fonction "save" avec variable dynamique
    Par Nyquist dans le forum MATLAB
    Réponses: 15
    Dernier message: 30/06/2011, 09h09
  2. Tracer une fonction avec conditions sur variable
    Par Leonpolou dans le forum MATLAB
    Réponses: 16
    Dernier message: 23/10/2009, 17h53
  3. Fonction avec Nom de champs dynamique
    Par Le_Phasme dans le forum Windows Forms
    Réponses: 1
    Dernier message: 12/11/2008, 18h12
  4. Réponses: 9
    Dernier message: 15/05/2007, 12h41
  5. fonction avec et sans variable
    Par Emcy dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 02/02/2007, 10h03

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