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 :

Comment tester si .val() est concrètement vide ?


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web en formation
    Inscrit en
    Février 2014
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web en formation

    Informations forums :
    Inscription : Février 2014
    Messages : 66
    Par défaut Comment tester si .val() est concrètement vide ?
    Bien le bonjour la communauté !

    J'ai un petit souci avec .val() que j'utilise dans un test

    En résumé, j'ai une grille (pour ceux qui n'auraient pas suivi mes pérégrinations dans l'autre topic, une grille de SUDOKU)
    Mon but, c'est qu'un fois que l'utilisateur a tout remplis la grille, cela m'affiche en vert tous les résultats avec un message de félicitation.
    mais si, alors que la dernière case est rempli, il reste une erreur, alors il me le dit.
    Mais passons, car mon problème se situe au tout départ de ce test en effet voici mon code :

    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
    for(k=0;k<9;k++){
          if(erreur==true){// si la variable erreur = true
            alert("HOP HOP HOP ! Il vous reste une erreur \340 corriger");
            break;// sort de la boucle
          }
          else{
            for(m=0;m<9;m++){
              valID = k + '-' + m;
              //alert("valeur de la cellule " + valID + " est : " + $('#'+valID+'').val()+"*");
              if ($('#'+valID+'').val()==''){
                rempliok=false;
                break;
              }
              else{
                rempliok=true;
              }
            }
          } 
        }
     
        if((rempliok==true)&&(erreur==false)){// si la variable erreur = true (donc que tous les input sont remplis) et que rerreur=false (donc qu'aune erreur n'est déclarée)
          $(".grille").css("color","#8ee4ae"); // Une fois tout le tableau vérifié, si tu es arrivé jusque là sans erreur passe tout ce qui à la classe grille en "VERT"
          alert("Bravo ! Vous avez bien trich\351. Mais on admettra que vous avez pu aussi \352tre honn\352te et bon");
        }
    Comme on peut le voir, je lui demande de me passer la variable "rempliok" en FALSE, s'il croise une cellule dont la valeur est vide ".val()==''
    S'il n'en croise pas (et que donc le tableau est rempli, alors il passe ma variable "rempliok" en "true".

    Or quoiqu'il advienne, il execute la dernière commande et me passe tout en vert (ce qui veut donc dire qu'il me transforme ma variable "rempliok" en "true" et que donc, il ignore les cellules vides
    D'ailleurs, lorsque j'affiche l'alerte (en ligne 9), c'est assez claire, je vois bien qu'arrivé dans une cellule vide, il m'affiche "4-3 : " (donc aucune valeur) mais il continue pourtant à parcourir la grille, alors qu'il devrait sortir (ce que je lui demande avec "break;")

    Ainsi, j'en déduis que la syntaxe est mauvaise.
    j'ai essayé, .val()==false / .val()==null
    Rien n'y fait.
    il ne reconnait pas la nature "vide" de la cellule comme je le souhaiterais

    Qu'est-ce que j'écris mal ?

  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 659
    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 659
    Billets dans le blog
    1
    Par défaut
    la comparaison est correcte, ce qui me le semble moins ce sont tes selecteurs, voire tes id ...


    le +'' est inutile...

    par contre ta concaténation veut dire que tu as des id qui commencent par du numérique ?
    Peut on voir le HTML associé ?
    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
    Membre confirmé
    Homme Profil pro
    Développeur Web en formation
    Inscrit en
    Février 2014
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web en formation

    Informations forums :
    Inscription : Février 2014
    Messages : 66
    Par défaut
    Ah ca pourrait venir des ID...
    pourtant dans mon test, il récupère bien les ID

    En fait oui, je récupère mon attribut ID depuis mon PHP (qui se compose du numéro de ligne et du numéro de colonne), et je découpe cet id en deux variables jQuery, comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var ident = $(this).attr('id');// on récupère l'attribut ID de la balise <input>
    var splitresult = ident.split("-"); // Coupe l'attribut ID en cases (dans une tableau), dont le séparateur est "-" (si attr = 4-3, il coupera 4, "-" = séparateur)
    var j = splitresult[0];//1ere case = j (soit n° de colonne)
    var i = splitresult[1];//2nd case = i (soit n° de ligne)
    valID = j + "-" + i;//on reprend l'ID décomposé et compatible jQuery dans une variable.
    ceci étant reprit depuis mon fichier PHP ici :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo '<input type="text" name="cell '.$j.'-'.$i.'" id="'.$j.'-'.$i.'" maxlength="1" class="valuser grille"/>'
    //cet ID va chercher les valeurs dans un tableau à double entrée $Grille[$j][$i], qui compose ma grille de sudoku
    Après comme l'utilise à l'intérieur de boucle (pour vérifier les valeurs de la colonne de l'input concerné) j'ai transformer le i et le j en k et m
    Ce dessus l'exemple du code pour la colonne, celui pour la ligne est sur même principe sauf que 'j' devient 'm' (car ma boucle est for(m=0;m>9;m++))
    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
    for(k=0;k<9;k++){//Boucle pour vérifier la colonne : Boucle jusqu'à 8 (ce qui fera boucler sur toute la hauteur du tableau qui est de 9 cases)
            if(erreur==true){// si la variable erreur = true
              alert("ATTENTION! Vous avez une erreur \340 corriger...");
              erreur=true;
            }
            else{
              valID = j + "-" + k;// On initialise valID : "J" étant le n°de colonne où on est, et qui doit rester fixe. Seul "i" (devenu K pour la boucle) doit changer
              //alert("valeur de la cellule " + valID + " : " + $('#'+valID+'').val());
              if(k!=i){// si tu te trouves partout ailleur qu'à la cellule où est l'input concerné par l'événement (car si i=K c'est qu'on est en train de vérifier la cellule de l'input)
                if($(this).val()== $('#'+valID).val()){// si la valeur entrée dans cette input = la valeur de la cellule avec l'id que tu es en train de parcourir
                  alert("ATTENTION ! cette valeur existe d\351j\340 dans la colonne...");
                  $(this).css("color","#ff6c6c");//texte en ROUGE
                  erreur = true;// transforme la variable erreur en True (pour bloquer la seconde boucle, devenue inutile puisqu'il y a déjà une erreur de rencontrée)
                  break;// sort de la boucle
                }
                else{ // sinon, si la valeur n'existe pas
                  $(this).css("color","#a2cdf8");//texte en BLEU
                  erreur=false
                }
              }
            }
          }

    Ceci dit ce code fonctionne puisque c'est à partir de lui que, dans ma grille je vérifie si la valeur entrée par l'utilisateur existe déjà dans la ligne, dans la colonne et enfin dans le bloc.
    Et la vérification fonctionne parfaitement.

  4. #4
    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 659
    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 659
    Billets dans le blog
    1
    Par défaut
    Je ne vois pas d'id ... je vois un name ...
    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 !

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur Web en formation
    Inscrit en
    Février 2014
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web en formation

    Informations forums :
    Inscription : Février 2014
    Messages : 66
    Par défaut
    regarde encore un peu, juste après le name...

  6. #6
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var ident = $(this).attr('id');// on récupère l'attribut ID de la balise <input>
    var splitresult = ident.split("-"); // Coupe l'attribut ID en cases (dans une tableau), dont le séparateur est "-" (si attr = 4-3, il coupera 4, "-" = séparateur)
    var j = splitresult[0];//1ere case = j (soit n° de colonne)
    var i = splitresult[1];//2nd case = i (soit n° de ligne)
    valID = j + "-" + i;//on reprend l'ID décomposé et compatible jQuery dans une variable.
    Intéressante ta méthode pour retrouver l'identifiant d'un élément à partir de son identifiant.
    Ceci dit, je préfère la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var ident = $(this).attr('id');
    valID = ident.replace(/./g, function(st){return st});
    Le .g, il n'y a pas mieux !

    Avec un peu de raffinement pour transtyper la chaine de caractères en chaine de caractères, ça donnerait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var ident = $(this).attr('id');
    valID = '' + ident.replace(/./g, function(st){return st}) + '';
    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

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

Discussions similaires

  1. comment tester si un formulaire est vide?
    Par stéphane_ais2 dans le forum Access
    Réponses: 5
    Dernier message: 22/09/2005, 10h28
  2. [langage] Comment tester si une chaine est vide
    Par |Bio dans le forum Langage
    Réponses: 4
    Dernier message: 04/05/2005, 15h05
  3. Comment tester si un repertoire est vide sous Linux
    Par chouchouappc dans le forum Linux
    Réponses: 3
    Dernier message: 24/02/2005, 12h03
  4. Comment tester si fichier est ouvert ?
    Par fusef dans le forum Langage
    Réponses: 7
    Dernier message: 11/08/2004, 18h51

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