Bonjour,
Je possède un tableau, avec scroll sur X et Y, construit via une fonction javascript. Dans chaque cellule de ce tableau, il y a un glyphicon permettant d'afficher une balise <input type='text'> ou de la cacher. Hors, cette dernière ne s'affiche que dans la cellule et est caché sous les cellules voisines, ce qui empêche l'utilisateur de voir une partie de ce qu'il écrit.
Ici, j'ai tapé 5 fois la lettre 'o', une seule est lisible.
Pour régler ce problème, j'ai envisagé deux solutions: jouer avec z-index et position ou utiliser un popover. Aucune des deux ne fonctionne
1ère solution:
Le code html / php:
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 if (!is_null($p->getCommentaire())) { echo "<div class='commentaire'>"; echo "<span class='glyphicon glyphicon-info-sign' onclick='show(this)'>"; echo "<p class='commSaisie' style='display:none'>"; echo "<input type='text' name='commentaires[]' class='inputCommentaire' onblur='hide(this)' value='".$p->getCommentaire()."'>"; echo "</p>"; echo "</span>"; echo "</div>"; }
Le code css:
Le code js:
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 /* Span de commentaire */ .commentaire { position: relative; z-index: 120; width: 15px; float: right; } /* input des commentaires lors de la modification d'un planning*/ .inputCommentaire{ position: relative; overflow: visible; z-index: 120; } /* Saisie / modif d'un commentaire */ p.commSaisie{ margin-left: -145px; margin-top: -40px; z-index: 120; } /* icone des commentaires */ .glyphicon{ z-index: 1; }
Code javascript : 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 function show(span){ //Affichage de la zone de saisie du commentaire span.lastChild.style.display = "flex"; span.lastChild.style.position = "absolute"; //span.lastChild.lastChild.style.position = "fixed"; span.lastChild.lastChild.focus(); } function hide(input){ //On cache le commentaire et selon sa classe, on effectue une vérification input.parentNode.style.display = "none"; input.parentNode.style.display = "relative"; //input.style.position = "relative"; if (input.value.length > 0){ //Si un commentaire à été saisis input.parentNode.parentNode.className = "glyphicon glyphicon-info-sign"; }else{ input.parentNode.parentNode.className = "glyphicon glyphicon-plus"; } }
Le problème de cette solution est que l'input se retrouve à une position fixe sur l'écran et ne reste pas attaché au glyphicon, qu'il soit affiché ou caché. De plus, les inputs des cellules cachés de bases, ne sont donc même pas visible.
J'aimerais favoriser cette solution puisque l'application que je développe est un projet d'étude.
La seconde solution:
Code html / php:
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 echo "<div class='commentaire'>"; echo "<span class='glyphicon glyphicon-plus' data-toggle='popover' data-placement='top' data-trigger='focus' data-html='true'>"; // echo "<p class='commSaisie' style='display:none'>"; // echo "<input type='text' name='commentaires[]' onblur='hide(this)'>"; // echo "</p>"; echo "</span>"; echo "</div>";
Code js:
Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 $(document).ready(function(){ $('[data-toggle="popover"]').popover(); $('[data_toggle="popover"]').html("<input type='text' name='commentaires[]'>"); });
Le problème de cette solution est que le popover ne s'affiche pas, rien ne se passe quand je clique sur le glyphicon. A noter également qu'il peut y avoir du contenu déjà présent dans le commentaire et qu'il faut le renseigner comme valeur de base de l'input, commentaire qui est différent d'une cellule à l'autre. C'est pour cette raison que je favorise la première solution.
Voilà voilà, j'espère que c'est assez clair, n'hésitez pas à poser des questions.
Merci d'avance de votre aide.
Cordialement,
Skunka.
Partager