Project

General

Profile

Anomalie #23116

Le systeme de template peut générer des ids identiques

Added by Renaud Dussol about 6 years ago. Updated about 6 years ago.

Status:
Fermé
Priority:
Normal
Assigned To:
Target version:
Start date:
02/21/2018
Due date:
% Done:

100%

Distribution:

Description

Exemple : edispatcher-toolbar possède deux entrées dans notre template : l’une dans une div visible-xs l'autre dans une div visible-sm

Le problème est que la classe visible-xs passe l'élément à display:none, ce qui ne supprime pas l'élément du DOM mais le masque simplement
Dans la toolbar il y a le bouton de refresh qui porte l'id refreshBtn. Au final cet id se retrouve donc 2 fois dans le DOM, ce qui nous pose problème car nous utilisons un getelementbyid sur cet élément et que le comportement est aléatoire

Apparemment un JQuery du style $(".hidden").remove(); pourrait le faire.
Je vais la tester sur notre template

Je t'assigne quand-même la demande si des fois tu as déjà réfléchi au problème et que tu as une solution

History

#1 Updated by Renaud Dussol about 6 years ago

  • % Done changed from 0 to 90

Dans le template on peut mettre par exemple :

if ($(window).width() > 768) {
$( ".visible-xs" ).remove();
}

Cela fonctionne sous FF, les éléments sont bien supprimés du DOM. Je n'ai pas tenté le resize par contre, ni testé sous chrome

Si cette solution est convenable, on peut l'étendre à l'ensemble des possibilités et l'inclure dans les JS des templates

#2 Updated by Christophe LEON about 6 years ago

  • Status changed from Nouveau to En attente d'informations

Dans le composant la reference est faite comme suit

self.$.refreshBtn

effectivement a l’extérieur il n'est pas censé être manipulé :)

Et pourquoi tu veux l'atteindre en externe ?

Il faudrait sinon nommé ta toolbar par exemple #toolbar

Et tu peux y accéder comme suit

document.getelementbyid("toolbar").$.refreshBtn

#3 Updated by Renaud Dussol about 6 years ago

Nous avons besoin d'accéder aux ids pour utiliser l'aide contextuelle de introjs (https://introjs.com/)
Cela marche très bien et est très simple à mettre en place mais cela nécessite des ids précis
Effectivement la solution consistant à mettre un id sur la toolbar pourrait fonctionner je vais la tester, cela m'énerve de ne pas y avoir pensé :-)
Sinon quand même je pense que d'une manière générale c'est peut-être mieux de ne pas avoir plusieurs fois un id identique dans le DOM

Sinon tu penses que la solution jquery de détecter les breakpoints bootstrap et faire un remove pourrait poser problème ?

#4 Updated by Renaud Dussol about 6 years ago

  • Status changed from En attente d'informations to Résolu
  • % Done changed from 90 to 100

L’ajout d'un ID à la toolbar et le sélecteur "#IDdelatoolbar #refresBtn" résout le pb
Le JQuery fonctionne néanmoins bien aussi, donc on sait que l'on peut l'utiliser si vraiment on veut supprimer des éléments du DOM en fonction des breakpoints Bootstrap
Je passe à Résolu (on peut même fermer car cela ne concernait que le template, je ne sais pas quelle est la bonne pratique...)

#5 Updated by Christophe LEON about 6 years ago

  • Target version set to Envole 5.8

#6 Updated by Arnaud FORNEROT about 6 years ago

  • Status changed from Résolu to Fermé

Also available in: Atom PDF