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 :

Boucle for en fonction d'une valeur de champ


Sujet :

jQuery

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 26
    Points : 11
    Points
    11
    Par défaut Boucle for en fonction d'une valeur de champ
    Bonjour,

    Novice de chez novice en jquery je cherche a faire une boucle for en fonction d'une valeur de champ qui sera variable.

    Un champ nbligne contiendra le nbre de ligne qui répondront aux critères.

    mon code html :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <! Ligne 1 !>		
    <tr id='ligne1' bgcolor = "#FFFFFF" align="left" valign="top" border="1" cellspacing="0" class="St1" Style='display' >
    <td align='center'>01</td><<td>
    <input name="L_1" value="1 - essai" tabindex="102"></td>
    </tr>
    <! Ligne 2 !>
    <tr id='ligne2' bgcolor = "#FFFFFF" align="left" valign="top" border="1" cellspacing="0" class="St1" style='display'>
    <td align='center'>02</td><<td>
    <input name="L_2" value="2 - essai " tabindex="102"></td>
    </tr>
    <! Ligne 3 !>
    <tr id='ligne3' bgcolor = "#FFFFFF" align="left" valign="top" border="1" cellspacing="0" class="St1" style='display'>
    <td align='center'>02</td><<td>
    <input name="L_2" value="2 - essai " tabindex="102"></td>
    </tr>

    Sur ce code j'applique le code jquery suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $(document).ready(function(){
    var nblignedisplay=$('[name=NBLIGNE]').val();
    $("[id^='ligne'] input").attr('disabled', true);
    });
    Mais cela ne suffit pas bien évidement.

    Je voudrais le code correspondant à l'algo suivant :
    -faire la liste de tous les ids commencant par ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (var i = 0, limit = nblignedisplay; i < limit; i++) {
    $("[id^='ligne'+i] input").attr('disabled', true);
    }
    les pbs :
    1 - faire la liste de tous les ids commençant par ligne
    2 - faire la boucle for
    3 - ajouter la variable i au code $("[id^='ligne'+i] input").attr('disabled', true); pour savoir quel input traité

    Si qlqu'un pouvait m'aider, merci d'avance

  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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 664
    Points
    66 664
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $("[id^='ligne'] input").each( function(){$(this).attr('disabled', true);})

  3. #3
    Membre habitué
    Homme Profil pro
    Developpeur web/Java
    Inscrit en
    Février 2008
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Developpeur web/Java
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Février 2008
    Messages : 98
    Points : 178
    Points
    178
    Par défaut
    Bonjour,

    Tu n'as pas besoin de passer par une boucle for.
    Tu peux utiliser .each() disponible dans jquery : https://api.jquery.com/each/

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $("[id^='ligne'] input").each(function(){
    /* ton code */
    });

  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
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Il n'y a pas besoin de each() non plus !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $("[id^='ligne'] input").attr('disabled', true)

  5. #5
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Pourquoi utiliser un ID ligne42 quand le tag 'tr' désigne déjà en lui-même une ligne ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $("table tr input").slice(0, nblignedisplay).attr('disabled', true);

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 26
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    Merci déjà pour votre contribution.
    Je vais essayer de répondre sans trop raconter n'importe quoi.

    @SylvainPV : La solution pourrait être interessante si je n'avais que cette partie de code qui comportait des TR mais ce n'est pas le cas. Les lignes à traiter sont toutes identifées par les ids ligne..

    @Bovino : Ce code traite tous les inputs qui commencent par ligne sans faire de distinction en fonction des lignes qui doivent être traitées. Rappel c'est la variable nblignedisplay qui va me dire combien de ligne je dois traiter.

    @SpaceFrog : Meme reponse que pour Bovino. Je pense que ce code peut etre simplifié en mettant le code que j'avais initialement mis en oeuvre c'est à dire $("[id^='ligne'] input").attr('disabled', true)

    @SpaceFrog : Meme reponse que les deux precedentes.

    Rappel : Le besoin est de traiter le nbre de lignes indiqué par la variable nblignedisplay. Dans le code HTML je n'ai mis que deux lignes mais potentiellement j'en ai beaucoup plus.

    Exemple :
    Si la variable m'indique "5" je vais traiter les lignes : ligne1, ligne2, ligne3, ligne4 et ligne5 mais pas les autres.
    Le code de traitement sera celui ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $("[id^='ligne'+I] input").attr('disabled', true);
    C'est pour cela que je pensais a une boucle for car il me semble que la fonction each va traiter toutes les lignes, enfin comme elle est présentée dans vos codes respectifs.

    Merci d'avance.

  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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 664
    Points
    66 664
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $("[id^='ligne'] input").filter( function(I){ +$(this).attr(id).match(/\d+/)<= I }).attr('disabled', true);
    http://jsfiddle.net/4cyge/

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 26
    Points : 11
    Points
    11
    Par défaut
    Merci SpaceFrog pour la rapidité.

    Par contre là ça me fait des noeuds au cerveau car j'ai du mal a comprendre le code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $("[id^='ligne'] input").filter( function(I){ +$(this).attr(id).match(/\d+/)<= I }).attr('disabled', true);
    La traduction est-elle :
    I est mon nbre de ligne a traiter.
    Je prend en compte tous les inputs des ids ligne, et si id ligne est inférieur à I alors je traite avec attr('disabled', true) ?????

    Je ne vois pas ou est l'association entre l'id et le numéro ??
    et peut-on faire en sorte de ne pas traiter la ligne0 ??

    Merci d'avance pour les explications.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 26
    Points : 11
    Points
    11
    Par défaut
    Perso, ca ne fonctionne pas pour moi.

    De plus je me demande s'il n'existe pas une erreur dans le code donné (oubli de "" sur id) car cela me génère une erreur id indéfini.

    Moi j'ai ça comme code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $(document).ready(function(){
    var nblignedisplay=$('[name=CHPLIGNE]').val();
    //alert(nblignedisplay typeof);
     
    $("[id^='ligne'] input").filter( function(nblignedisplay){ +$(this).attr("id").match(/\d+/)<= nblignedisplay }).attr('disabled', true);
    });

  10. #10
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 664
    Points
    66 664
    Billets dans le blog
    1
    Par défaut
    ben avec un code contenant des erreurs de syntaxe, ce n'est pas très étonnant que cela ne fonctionne pas ...

    Cela ne pose pas de souci particulier ...
    http://jsfiddle.net/4cyge/2/


    filter() doit retourner un boolean donc contenir une fonction avec un test qui retourne un boolean ...

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 26
    Points : 11
    Points
    11
    Par défaut
    Non en fait ca ne fonctionne pas sur des champs.

    Je viens de tester en ajoutant des champs sur http://jsfiddle.net/4cyge/ et le résultat est le même que sur mon environnement. La modification des attr ne s'applique pas.

    Je suis navré.

  12. #12
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 664
    Points
    66 664
    Billets dans le blog
    1
    Par défaut
    ou avec un filter sur :lt()

    http://jsfiddle.net/4cyge/3/

  13. #13
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 664
    Points
    66 664
    Billets dans le blog
    1

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 26
    Points : 11
    Points
    11
    Par défaut
    J'ai trouvé un bout de code qui semble faire l'affaire mais qui ne fonctionne pas chez moi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $(document).ready(function(){
      $("[id^='ligne']:lt(2)").find('input').attr("disabled",true);
    });
    Ce que tu as fait est excellent aussi mais pareil impossible de fonctionner chez moi.

    Comme c'est bizarre.

  15. #15
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 664
    Points
    66 664
    Billets dans le blog
    1
    Par défaut
    essaye avec prop et "disabled"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $("[id^='ligne']:lt(2)").find('input').prop("disabled","disabled");

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 26
    Points : 11
    Points
    11
    Par défaut
    alléluia, alléluia, alléluia

    Ca fonctionne.....

    J'ai trouvé l'anomalie. J'ai transposé tout mon code HTML sur ce que tu avais fait et là c'est le drame, même anomalie donc le pb venait de mon code HTML.
    En fait l'id ligne0 était également utilisé sur mon table c'est pour cela qu'il me passait tout le tableau en disabled et non sur les lignes souhiatées.

    En tout cas un grand merci à SpaceFrog et tous les autres contributeurs.....

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

Discussions similaires

  1. [AC-2007] Calcul changeant en fonction d'une valeur de champ différente
    Par frabeau dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 06/03/2015, 12h19
  2. [2008] Dupliquer lignes en fonction d'une valeur de champ
    Par Fredo67 dans le forum SSIS
    Réponses: 1
    Dernier message: 02/02/2015, 17h51
  3. Probleme dans une boucle for, faisant appel a une fonction
    Par mapotam dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 22/01/2010, 21h41
  4. boucle for each next : sauter une valeur
    Par scavenger dans le forum VBScript
    Réponses: 1
    Dernier message: 18/02/2009, 10h15
  5. fonction retournant une valeur
    Par ryan dans le forum ASP
    Réponses: 4
    Dernier message: 06/09/2004, 17h45

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