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

JavaScript Discussion :

Déplacer un élément Input avec une fonction


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 24
    Points : 19
    Points
    19
    Par défaut Déplacer un élément Input avec une fonction
    Bonsoir,

    Je travaille sur un système d'édition de champs classique : un DIV contenant un texte se change en INPUT quand on clique dessus => le texte est modifiable. Jusqu'ici tout va bien..

    Le problème auquel je me retrouve confronté est que mon élément INPUT se décale légèrement par rapport à l'élément DIV d'origine sous certaines conditions (taille de la police par exemple). Du coup, cela décale et/ou déplace d'autres éléments dans ma page. Bof bof..

    Une solution a été de passer le style position de l'élément INPUT en absolue et d'utiliser une fonction Javascript pour récupérer les coordonnées top/left du DIV de départ,
    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
     
    function getPosition(e){
    	var left = 0;
    	var top  = 0;
     
    	while (e.offsetParent){
    		left += e.offsetLeft;
    		top  += e.offsetTop;
    		e     = e.offsetParent;
    	}
     
    	left += e.offsetLeft;
    	top  += e.offsetTop;
     
    	return {x:left, y:top};
    }
    puis de déplacer l'élément INPUT avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    input.style.top = ...
    input.style.left = ...
    Mais cela n'est pas viable car je me retrouve confronté à d'autres problèmes de positionnements, l'élément INPUT créant un vide dessous lui.

    Je souhaiterais donc pouvoir déplacer mon INPUT sans avoir à toucher à la propriété de positionnement.

    Des idées ????

  2. #2
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    336
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 336
    Points : 374
    Points
    374
    Par défaut
    Si tu veux que ton input se déplace sans déranger ce qu'il y'a autour de lui, le mieux c'est de lui définir une position : absolute, et de le mettre dans un élément qui a une position relative

  3. #3
    Membre à l'essai
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 24
    Points : 19
    Points
    19
    Par défaut
    Salut,

    Merci de ta réponse. En fait, mon champs modifiable est déjà encapsulé dans un DIV "container" dont la propriété position n'est pas définie (par défaut cet élément se voit assigner une position relative il me semble).

    Mais le véritable problème est ailleurs. Mon champ INPUT se redimensionne à chaque fois qu'on tape une touche (onkeydown) un peu comme le titre d'une page Netvibes. Quand l'élément INPUT est en absolute, les autres éléments qui sont sur la même ligne et à sa droite se décalent à gauche et dessous comme si mon DIV "container" était ignoré. Si ce n'était pas le cas, je n'aurais plus qu'à redimensionner le "container" de concert avec l'input..

    Désolé pour cette omission, j'aurais peut-être du commencer mes explications par là.

  4. #4
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 139
    Points
    11 139
    Par défaut
    Citation Envoyé par gloumouth
    Bonsoir,

    Je travaille sur un système d'édition de champs classique : un DIV contenant un texte se change en INPUT quand on clique dessus => le texte est modifiable. Jusqu'ici tout va bien..

    Des idées ????
    Pourquoi ne pas utiliser un textarea ?

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    <html>
    <head>
    <style type="text/css">
    <!--
    textarea{
    border: 1px groove #AAAAAA;
    }
    //-->
    </style>
     
    <script type="text/javascript">
    <!--
    function activer(obj)
    {
      obj.readOnly="";
    }
    function desactiver(obj)
    {
     obj.readOnly="readonly";
    }
     
    //-->
    </script>
    </head>
     
    <body>
    <textarea rows="10" cols="30" readonly="readonly" onclick="activer(this)" onblur="desactiver(this)">
    bla bla bla bla bla bla bla bla bla bla bla bla 
    bla bla bla bla bla bla bla bla bla bla bla bla 
    bla bla bla bla bla bla bla bla bla bla bla bla 
    </textarea> 
     
    </body>
    </html>

  5. #5
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    quand l'input ne doit pas être visible -> "display:none"

    j'ai eu à implémenter une grille il y a peu, ça n'a pas posé de pb. un input pour toute la grille qui se déplace sur la cellule cliquée et qui se redimensionne en conséquence

  6. #6
    Membre à l'essai
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 24
    Points : 19
    Points
    19
    Par défaut
    En réponse à Auteur: je ne pense pas qu'un textarea résoudra mes problèmes car je souhaite avoir un champ qui se redimensionne à chaque onkeydown en fonction de son contenu. cela dit, je n'ai peut-être pas tout à fait saisi ce que tu imagines.

    En réponse à bigboomshakala: quand tu dis
    qui se redimensionne en conséquence
    ça veut dire à chaque fois que tu tapes une touche ou seulement au moment du switch, quand l'élément devient éditable ?

  7. #7
    Membre actif Avatar de Cpas2latarte
    Inscrit en
    Janvier 2006
    Messages
    237
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 237
    Points : 255
    Points
    255
    Par défaut
    et pourquoi pas un div avec la propriété contenteditable = true
    . On recupere la "valeur" avec la propriété innerText ou innerHTML.
    Par contre il faut vérifier si ça fonctionne sur firefox.
    Il n'y a que 2 choses infinies dans le monde :
    L'univers et la bétise humaine...
    Mais pour l'univers, je n'ai pas de certitude (A.E.)

Discussions similaires

  1. [Lisp] Communiquer avec une fonction en c++
    Par Nadine dans le forum Lisp
    Réponses: 5
    Dernier message: 10/01/2005, 20h15
  2. Problème avec une fonction date.
    Par kmayoyota dans le forum ASP
    Réponses: 8
    Dernier message: 09/09/2004, 12h33
  3. Thread avec une fonction membre d'une classe
    Par SteelBox dans le forum Windows
    Réponses: 6
    Dernier message: 01/03/2004, 01h15
  4. Retourner une valeur avec une fonction
    Par stephtbest dans le forum ASP
    Réponses: 4
    Dernier message: 31/10/2003, 16h37
  5. [VBA-E] avec une fonction value
    Par laas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/11/2002, 13h22

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