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 :

Remplacement d'un champ input par une liste d'options selon l'�tat de l'attribut readonly


Sujet :

JavaScript

  1. #1
    Membre �prouv�
    Homme Profil pro
    Ing�nieur en �lectrotechnique retrait�
    Inscrit en
    D�cembre 2008
    Messages
    1 718
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 73
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activit� : Ing�nieur en �lectrotechnique retrait�

    Informations forums :
    Inscription : D�cembre 2008
    Messages : 1 718
    Par d�faut Remplacement d'un champ input par une liste d'options selon l'�tat de l'attribut readonly
    Bonjour � tous.
    Les listes d'options ne prennent pas en compte l'attribut readonly. Je veux donc afficher un champ input avec l'attribut readonly et le remplacer par une liste d'options en l'absence de cet attribut. Parce que je ne vois pas comment traiter la liste d'options comme le reste.
    Code html : S�lectionner tout - Visualiser dans une fen�tre � part
    <label>Pays</label><span id="country"><input type="text" name="pays" value="<?= $address->pays; ?>" readonly /></span><br/>
    Dans le code qui suit la fonction listOnBlur n'est pas appel�e. Pourquoi?
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    "use strict";
     
    const
    	inclForm	= window.document.querySelector('.displCard')
    	, fields		= window.document.querySelectorAll('.displCard [readonly]')
    	, country		= window.document.querySelector('.displCard #country');
     
    function handleOnDblClick() {
    	if ( this.name == 'pays' ) {
    		country.innerHTML = fromPHPtoJS.lstCountries;
    	}
    	this.removeAttribute('readonly');
    	this.select();
    }
     
    function handleOnBlur() {
    	this.setAttribute('readonly', 'readonly');
    	inclForm.action = 'editField.php?field='+this.name;
    	inclForm.submit();
    }
     
    function handleKeyDown(e) {
    	if ( e.keyCode == 8 && this.hasAttribute('readonly') ) { e.preventDefault(); }
    }
     
    function listOnDblClick(e) {
    	this.innerHTML = fromPHPtoJS.lstCountries; // Contient la liste d'options complète
    }
     
    // Pourquoi cette fonction n'est jamais utilisée ??
    function listOnBlur() {
    	console.log(fields[2]);
    	alert('fonction listOnBlur');
    	fields[2].value = this.firstChild.selectedIndex;
    	this.innerHTML = fields[2];
    	//inclForm.preventDefault(); // Pour mise au point
    	inclForm.submit(); // Après mise au point
    }
     
    country.ondblclick	= listOnDblClick;
    country.onblur		= listOnBlur;
    for (let i=0, max=fields.length; i<max; i++) {
    	fields[i].ondblclick	= handleOnDblClick;
    	if ( i != 2 ) { fields[i].onblur = handleOnBlur; }
    	fields[i].onkeydown		= handleKeyDown;
    }

  2. #2
    Invit�
    Invit�(e)
    Par d�faut
    Bonjour,

    j'ai trait� la question ce matin dans cette discussion.

    Une solution consiste � d�sactiver les options non s�lectionn�es.

    Code JavaScript : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
      var allSelectOptions = document.querySelectorAll("select option");
      allSelectOptions.forEach(function(seloption) {
        if (!seloption.selected) { // on desactive les options non selectionnees
          seloption.disabled = true;
        }

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par d�faut
    Salut,

    Je n'ai pas encore regard� le reste mais justement r�cemment jreaux62 a donn� une solution par rapport au premier probl�me : #3

    EDIT : Ah quand j'ai commenc� � r�pondre jreaux62 n'avait pas encore r�pondu et avant que je poste quelqu'un est venu discuter avec moi...

  4. #4
    Membre �prouv�
    Homme Profil pro
    Ing�nieur en �lectrotechnique retrait�
    Inscrit en
    D�cembre 2008
    Messages
    1 718
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 73
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activit� : Ing�nieur en �lectrotechnique retrait�

    Informations forums :
    Inscription : D�cembre 2008
    Messages : 1 718
    Par d�faut
    Avec IE11, j'ai une erreur � la ligne 4 de ton code: "L'objet ne g�re pas la propri�t� ou la m�thode "foreach".
    J'ai v�rifi� sur MDN et cette m�thode est support�e � partir de la version 9.

  5. #5
    Invit�
    Invit�(e)
    Par d�faut
    Alors utilise la syntaxe donn�e par Beginner. :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
                for (var i = 0, l = allInput.length; i < l; i++) {
                    allInput[i].readOnly = true;
                }

  6. #6
    Membre �prouv�
    Homme Profil pro
    Ing�nieur en �lectrotechnique retrait�
    Inscrit en
    D�cembre 2008
    Messages
    1 718
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 73
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activit� : Ing�nieur en �lectrotechnique retrait�

    Informations forums :
    Inscription : D�cembre 2008
    Messages : 1 718
    Par d�faut
    C'est d�j� ce que j'avais fait mais je voulais comprendre pourquoi. J'ai fait quelques recherches et il semblerait que cette m�thode ne fonctionne pas avec des listes de n�uds du DOM mais je n'ai pas tr�s bien compris pourquoi.

  7. #7
    Mod�rateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 211
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par d�faut
    Bonjour,
    J'ai v�rifi� sur MDN et cette m�thode est support�e � partir de la version 9.
    oui lorsqu'il s'agit d'une m�thode appliqu�e aux Array, Array.prototype, or l� tu travailles sur une NodeList, qui n'est pas un Array, et cette m�thode n'est pas impl�ment�e dans IE.


  8. #8
    Membre �prouv�
    Homme Profil pro
    Ing�nieur en �lectrotechnique retrait�
    Inscrit en
    D�cembre 2008
    Messages
    1 718
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 73
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activit� : Ing�nieur en �lectrotechnique retrait�

    Informations forums :
    Inscription : D�cembre 2008
    Messages : 1 718
    Par d�faut
    Il y a 3 semaines que je gal�re sur ce bout de script de quelques lignes et je n'en peux plus. Je ne sais plus comment traiter le probl�me! Autant je m'en sors � peu pr�s avec PHP, autant j'ai de grosses difficult�s avec JavaScript dont je n'arrive pas � comprendre la logique, principalement en ce qui concerne la chronologie des �v�nements et du code.
    Le probl�me des inputs est r�solu. Il me reste le probl�me de la touche 'enter' et surtout celui de la liste d'options (Si l'action de la touche 'enter' n'a pas de solution, ce n'est pas trop grave).
    En m'inspirant de la solution de jreaux62:
    1. Au chargement du document, je voudrais remplacer toutes les options par une seule, celle qui est s�lectionn�e par d�faut.
    2. Sur double clic, la liste doit faire appara�tre toutes les options.
    3. Sur clic ext�rieur (blur) ou touche 'enter', j'envoie le formulaire avec l'option l'option s�lectionn�e (comme avec handleOnBlur pour les champs input).

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    "use strict";
     
    //const
    var
    	inclForm			= document.querySelector('.displCard')
    	, inputs			= document.querySelectorAll('.displCard input, .displCard textarea')
    	, countriesList		= document.querySelector('.displCard select[name="pays"]')
    	, countriesOptions	= countriesList.options
    	, countrySelected	= countriesList.options[countriesList.selectedIndex]
    	;
    console.log('a',countriesList);		// Liste avec seulement l'option sélectionnée. Pourquoi n'est-elle pas complète avec toutes les options
    console.log('b',countriesOptions);	// J'ai exactement la même chose qu'en 'a'. Pourquoi je n'ai pas que l'option?
    console.log('c',countriesList.options); // J'ai exactement la même chose qu'en 'b'.
    console.log('d',countrySelected);	// Affichage attendu = option sélectionnée
     
     
    // Modification des champs
    // #######################
     
    function initCountriesList() {
    	console.log(1,countriesList); // Pourquoi comme en 'a', la liste ne contient que l'option sélectionnée? Sans appel à ce script, elle s'affiche entièrement.
    	countriesList.innerHTML = '';
    	console.log(2,countriesList); // Normal: liste vide
    	countriesList.appendChild(countrySelected);
    	console.log(3,countriesList); // Option sélectionnée mais sans le texte ente les balises d'ouverture et de fermeture de l'option
    }
     
    // Donne une liste vide
    window.onload = function(){ 
        initCountriesList();
    }
    /*
    // Donne une liste vide
    document.addEventListener('DOMContentLoaded', function(e) {
    	initCountriesList();
    }, false );
    */
     
    // La suite fonctionn sauf la condition keyCode = 13. Les modifications du champ ne sont pas prises en compte
    function handleOnDblClick() {
    	this.readOnly = false;
    	this.select();
    }
     
    function handleOnBlur() {
    	this.readOnly = true;
    	inclForm.action = 'editField.php?field='+this.name;
    	inclForm.submit();
    }
     
    function handleKeyDown(e) {
    	if ( e.keyCode == 8 && this.hasAttribute('readonly') ) { e.preventDefault(); }
    	if ( e.keyCode == 13 && this.type != 'textarea' ) { inclForm.submit(); }
    }
     
    for (let i=0, max=inputs.length; i<max; i++) {
    	inputs[i].ondblclick	= handleOnDblClick;
    	inputs[i].onblur		= handleOnBlur;
    	inputs[i].onkeydown		= handleKeyDown;
    }

  9. #9
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par d�faut
    Salut,

    Ben c'est difficile d'aider car on n'a pas tout, dans les commentaires tu nous listes les probl�mes que tu rencontres mais on ne peut pas tester, on ne peut pas les reproduire car tu nous ne donnes pas le html qui va avec le code JS, celui avec lequel tu fais tes testes... Alors on peut deviner une partie mais ce serait plus simple si tu nous donnais le html...

  10. #10
    Invit�
    Invit�(e)
    Par d�faut
    Bonjour,

    Donne aussi PLUS d'explications...


    Citation Envoy� par moimp Voir le message
    Au chargement du document, je voudrais remplacer toutes les options par une seule, celle qui est s�lectionn�e par d�faut.
    �a, je t'ai donn� le code pour le faire pour "d�sactiver" les options non s�lectionn�es.

    Par contre, si tu veux :
    • afficher d'abord un <input> en readonly,
    • puis au "clic", afficher le <select>,

    il n'y a rien de compliqu� l�-dedans ( : "afficher/masquer des div au clic").


    Sur double clic, la liste doit faire appara�tre toutes les options.
    D�j� qu'on a du mal � obtenir "1 clic" des internautes, mais leur demander un "double-clic", tu r�ves...

    Explique-nous pour quoi faire ?
    • pouvoir modifier l'option s�lectionn�e ?
    • ou juste "voir" les autres options, SANS pouvoir modifier ?



    Sur clic ext�rieur (blur) ou touche 'enter', j'envoie le formulaire avec l'option l'option s�lectionn�e (comme avec handleOnBlur pour les champs input).
    • Comment �a, "tu envoies" ?
    • Quel est l'int�r�t de ce formulaire ? (quelles champs sont modifiables ??)

  11. #11
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par d�faut
    Tu pourrais nous donner juste un exemple de code html pas forc�ment complet, un aper�u...

    Cela dit :

    Citation Envoy� par moimp Voir le message
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var
        inclForm            = document.querySelector('.displCard')
        , inputs            = document.querySelectorAll('.displCard input, .displCard textarea')
        , countriesList        = document.querySelector('.displCard select[name="pays"]')
        , countriesOptions    = countriesList.options
        , countrySelected    = countriesList.options[countriesList.selectedIndex]
        ;
    console.log('a',countriesList);        // Liste avec seulement l'option sélectionnée. Pourquoi n'est-elle pas complète avec toutes les options
    console.log('b',countriesOptions);    // J'ai exactement la même chose qu'en 'a'. Pourquoi je n'ai pas que l'option?
    console.log('c',countriesList.options); // J'ai exactement la même chose qu'en 'b'.
    1- "J'ai exactement la m�me chose qu'en 'b'."
    pour c tu affiches countriesList.options
    pour b tu affiches countriesOptions mais on a countriesOptions = countriesList.options

    donc b et c affiche la m�me chose, c'est normal.

    2- "J'ai exactement la m�me chose qu'en 'a'. Pourquoi je n'ai pas que l'option?"

    a et b ce n'est pas exactement la m�me chose, regarde :

    Nom : console.PNG
Affichages : 125
Taille : 12,8 Ko

    countriesList ---> c'est l��l�ment select
    countriesOptions = countriesList.options ---> c'est la liste des options, c'est une HTMLOptionsCollection...

  12. #12
    Membre �prouv�
    Homme Profil pro
    Ing�nieur en �lectrotechnique retrait�
    Inscrit en
    D�cembre 2008
    Messages
    1 718
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 73
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activit� : Ing�nieur en �lectrotechnique retrait�

    Informations forums :
    Inscription : D�cembre 2008
    Messages : 1 718
    Par d�faut
    Je vous envoie le code source html simplifi�. L� je pars en r�union, je traiterai le d�tail de vos remarques et de vos questions demain.
    Remarque: La ligne 71 du code n'est pas utilis�e pour l'instant mais elle est pr�vue pour charger si n�cessaire la liste compl�te ou la liste � option unique avec un simple innerHTML.
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="utf-8" />
     
    	<meta http-equiv="Pragma" content="no-cache" />
    	<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
    	<meta http-equiv="Expires" content="-1" />
     
    	<base href="http://omnes.proginet.local/" />
     
    	<link rel="stylesheet" media="all" type="text/css" href="css/structure.css" /> <!-- Dimensions et positions -->
    	<link rel="stylesheet" media="screen" type="text/css" href="css/style0.css" /> <!-- Apparence -->
    	<link rel="stylesheet" type="text/css" href="css/default_blue.css" /> <!-- Calendrier -->
    </head>
     
    <body>
     
    	<section id="main">
    		<div id="left">
    			<nav class="mainNav">
    				<ul>
    	<li><a href="parentPage.php?childPageKey=0">Accueil</a></li>
    	<li><a href="parentPage.php?childPageKey=2">Liste</a></li>
    	<li><a href="parentPage.php?childPageKey=3">Fiche</a></li>
    </ul>			</nav>
    		</div>
    		<article id="right">
     
     
     
    <h2>Fiche individuelle</h2>
    <h3>Ludovic <br/>(Nathalie)</h3>
    <div class="menuH">
    	<ul>
    		<a href='parentPage.php?childPageKey=3&tab=0'><li class='activTab'>Adresse</li></a><a href='parentPage.php?childPageKey=3&tab=1'><li>Famille</li></a><a href='parentPage.php?childPageKey=3&tab=2'><li>Groupes</li></a>	</ul>
    </div>
     
    <div class="subPage">
     
    <form method="post" action="" class="L displCard">
    	<input type="hidden" name="table" value="dat_addresses" />
    	<input type="hidden" name="id" value="120" />
    	<div class="multiCols">
    		<div class="div1">
    			<strong><label>Prénom</label><input type="text" name="prenom" value="Ludovic" readonly /></strong><br/>
    			<p></p>
    			<label>Adresse</label><textarea name="adresse" cols="30" rows="3" readonly ></textarea><br/>
    			<!-- <label>Pays</label><span id="country"><input type="text" name="pays" value="France" /></span><br/> -->
    			<label>Pays</label><select name="pays" id="pays"><option></option><option value="AF">Afghanistan</option><option value="FR" selected="selected">France</option><option value="ZW">Zimbabwe</option></select><br/>
    			<label>Code postal</label><input type="text" name="cp" value="01160" readonly /><br/>
    			<label>Ville</label><input type="text" name="ville" value="Saint Martin du Mont" readonly /><br/>
    		</div>
    		<div class="div2">
    			<strong><label>Nom</label><input type="text" name="nom" value="" readonly /></strong><br/>
    			<p></p>
    			<label>Tél. domicile</label><input type="text" name="tel_domicile" value="0474355680" readonly /><br/>
    			<label>Tél. portable</label><input type="text" name="tel_portable" value="0601757303" readonly /><br/>
    			<label>Tél. travail</label><input type="text" name="tel_travail" value="" readonly /><br/>
    			<label>Courriel</label><input type="text" name="courriel" value="" readonly /><br/>
    			<label>Date de naissance</label><input type="text" name="naissance" value="" readonly /><br/>
    		</div>
    	</div>
    	<div style="margin-top:10px;margin-left:20px;">
    		<label>Notes</label><textarea name="notes" style="width:500px" readonly></textarea><br/>
    		<label>Mise à jour le</label><input type="text" name="update_date" value="05/02/2019" readonly /><br/>
    	</div>
    </form>
     
    <script>
            var fromPHPtoJS = {"lstCountries":"<select name=\"pays\" id=\"pays\"><option><\/option><option value=\"AF\">Afghanistan<\/option><option value=\"FR\" selected=\"selected\">France<\/option><option value=\"ZW\">Zimbabwe<\/option><\/select>","countryShortOption":"<option value='FR'>France<\/option>"};
    </script>
    </div>
    		</article>
    	</section>
    	<script src='displCard.js'></script>
    </body>
     
    </html>

  13. #13
    Membre �prouv�
    Homme Profil pro
    Ing�nieur en �lectrotechnique retrait�
    Inscrit en
    D�cembre 2008
    Messages
    1 718
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 73
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activit� : Ing�nieur en �lectrotechnique retrait�

    Informations forums :
    Inscription : D�cembre 2008
    Messages : 1 718
    Par d�faut
    En fait, m�me si gr�ce � vous, je suis assez fier de m'en �tre sorti. Il me reste encore la gestion de la touche 'enter' (keyCode = 13) � r�gler: Les modifications ne sont pas prises en compte.
    Voici les modifications de mon code html:
    Code html : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    <label>Pays</label><input type="text" name="pays" value="France" readonly /><!--
    --><select name="pays" id="pays"><option></option><option value="AF">Afghanistan</option><option value="FR" selected="selected">France</option><option value="ZW">Zimbabwe</option></select><br/>
    et le code JavaScript actuel:
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    "use strict";
     
    const
    	, inclForm		= document.querySelector('.displCard')
    	, inputs		= document.querySelectorAll('.displCard input:not([name=\'pays\']), .displCard textarea')
    	, countriesList	= document.querySelector('.displCard select[name="pays"]')
    	, countryInput	= document.querySelector('.displCard input[name=\'pays\']')
    	;
     
    function countryOnWindowLoad() {
    	countriesList.classList.add('hidden');
    }
     
    function countryOnDblClick() {
    	countryInput.classList.add('hidden');
    	countriesList.classList.remove('hidden');
    }
     
    function countriesOnBlur() {
    	this.classList.add('hidden');
    	countryInput.classList.remove('hidden');
    	inclForm.action = 'editField.php?field='+this.name;
    	inclForm.submit();
    }
     
    window.onload = function(){ 
        countryOnWindowLoad();
    }
     
    countryInput.ondblclick	= countryOnDblClick;
    countriesList.onblur	= countriesOnBlur;
     
    function handleOnDblClick() {
    	this.readOnly = false;
    	this.select();
    }
     
    function handleOnBlur() {
    	this.readOnly = true;
    	inclForm.action = 'editField.php?field='+this.name;
    	inclForm.submit();
    }
     
    function handleKeyDown(e) {
    	if ( e.keyCode == 8 && this.hasAttribute('readonly') ) { e.preventDefault(); }
    	if ( e.keyCode == 13 && this.type != 'textarea' ) { inclForm.submit(); }
    }
     
    for (let i=0, max=inputs.length; i<max; i++) {
    	inputs[i].ondblclick	= handleOnDblClick;
    	inputs[i].onblur		= handleOnBlur;
    	inputs[i].onkeydown		= handleKeyDown;
    }
    EDIT:
    Je rencontre un autre probl�me: J'utilise ce script sur d'autres formulaires. Si ceux-ci n'ont pas de liste d'options, j'obtiens une erreur "r�f�rence nulle ou non d�finie". J'ai donc encadrer la partie de code concern�e dans une condition if ( typeof countriesList && typeof countryInput ) mais ceci n'emp�che pas l'erreur.

  14. #14
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par d�faut
    Ben tu n'as pas r�pondu aux questions de jreaux62, c'est pour mieux comprendre...





    Citation Envoy� par moimp Voir le message
    Il me reste encore la gestion de la touche 'enter' (keyCode = 13) � r�gler: Les modifications ne sont pas prises en compte.
    Qu'est-ce qui ne vas pas avec ce point ?

    La touche "enter" n'a-t-elle pas d�j� le comportement que tu veux (envoyer le formulaire) ?

    Si son comportement par d�faut ne te convient pas alors il faut que tu l�emp�ches comme pour la touche backspace...


    Citation Envoy� par moimp Voir le message
    EDIT:
    Je rencontre un autre probl�me: J'utilise ce script sur d'autres formulaires. Si ceux-ci n'ont pas de liste d'options, j'obtiens une erreur "r�f�rence nulle ou non d�finie". J'ai donc encadrer la partie de code concern�e dans une condition if ( typeof countriesList && typeof countryInput ) mais ceci n'emp�che pas l'erreur.
    Je ne vois pas cette condition dans ton code ???

  15. #15
    Membre �prouv�
    Homme Profil pro
    Ing�nieur en �lectrotechnique retrait�
    Inscrit en
    D�cembre 2008
    Messages
    1 718
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 73
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activit� : Ing�nieur en �lectrotechnique retrait�

    Informations forums :
    Inscription : D�cembre 2008
    Messages : 1 718
    Par d�faut
    Citation Envoy� par Beginner. Voir le message
    Ben tu n'as pas r�pondu aux questions de jreaux62, c'est pour mieux comprendre...
    Je n'�tais pas clair avec moi-m�me. Entre temps, j'ai avanc� tout seul et j'ai r�solu le plus dur.

    Citation Envoy� par Beginner. Voir le message
    Qu'est-ce qui ne vas pas avec ce point ?
    La touche "enter" n'a-t-elle pas d�j� le comportement que tu veux (envoyer le formulaire) ?
    Je n'ai pas �t� assez clair. En effet, je veux envoyer le formulaire mais apr�s prise en compte des modifications et non pas avant, comme avec handleOnBlur. En r�pondant � ta question, j'ai r�solu le probl�me, il manquait la ligne inclForm.action = 'editField.php?field='+this.name;

    Citation Envoy� par Beginner. Voir le message
    Je ne vois pas cette condition dans ton code ???
    Oui, parce que j'ai fait cette correction apr�s. Elle encadre les lignes 10 � 31.

  16. #16
    Membre �prouv�
    Homme Profil pro
    Ing�nieur en �lectrotechnique retrait�
    Inscrit en
    D�cembre 2008
    Messages
    1 718
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 73
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activit� : Ing�nieur en �lectrotechnique retrait�

    Informations forums :
    Inscription : D�cembre 2008
    Messages : 1 718
    Par d�faut
    Bonjour,

    J'ai trouv� une solution qui n'est peut-�tre pas la plus �l�gante. J'ai scind� mon fichier de script en deux et je n'appelle que ceux qui son n�cessaires. Mon probl�me est donc r�solu. Merci � vous. Vous m'avez bien aid�, d�j� au moins en me faisant poser les bonnes questions.

  17. #17
    Membre �prouv�
    Homme Profil pro
    Ing�nieur en �lectrotechnique retrait�
    Inscrit en
    D�cembre 2008
    Messages
    1 718
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 73
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activit� : Ing�nieur en �lectrotechnique retrait�

    Informations forums :
    Inscription : D�cembre 2008
    Messages : 1 718
    Par d�faut
    Contrairement � ce que je croyais, mon probl�me n'est pas compl�tement r�solu. Cette partie de code me pose un probl�me lorsque le champ pays n'est pas renseign�. Je ne sais pas comment tester et prendre en compte la valeur null des variables countriesList et countryInput lorsqu'elle sont vides dans le formulaire. C'est la condition dont je parlais et qui encadre maintenant la totalit� du script.
    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
    if ( typeof countriesList && typeof countryInput ) {
    	function countryOnWindowLoad() {
    		countriesList.classList.add('hidden');
    	}
     
    	function countryOnDblClick() {
    		countryInput.classList.add('hidden');
    		countriesList.classList.remove('hidden');
    	}
     
    	function countriesOnBlur() {
    		this.classList.add('hidden');
    		countryInput.classList.remove('hidden');
    		inclForm.action = 'editField.php?field='+this.name;
    		inclForm.submit();
    	}
     
    	window.onload = function(){
    		countryOnWindowLoad();
    	}
     
    	countryInput.ondblclick	= countryOnDblClick;
    	countriesList.onblur	= countriesOnBlur;
    }

  18. #18
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par d�faut
    Cette condition n'est pas correcte : si par exemple on a countriesList == null alors typeof countriesList renvoi "object" (c'est une string) et non null.

    Essaye en rempla�ant if (typeof countriesList && typeof countryInput) par if (countriesList == null && countryInput == null) ou simplement par if (countriesList && countryInput)...


    ---> Apr�s es-tu s�r que tu veux utiliser un "et logique" (&&) ? Parce que si par exemple on a countriesList == null alors (countriesList == null && countryInput == null) (ou (countriesList && countryInput)) renverra false m�me si countryInput n'est pas �gale � null...

    Peut-�tre que c'est un "ou logique" (||) que tu veux, non ?

  19. #19
    Membre �prouv�
    Homme Profil pro
    Ing�nieur en �lectrotechnique retrait�
    Inscrit en
    D�cembre 2008
    Messages
    1 718
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 73
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activit� : Ing�nieur en �lectrotechnique retrait�

    Informations forums :
    Inscription : D�cembre 2008
    Messages : 1 718
    Par d�faut
    Cette condition n'est pas correcte : si par exemple on a countriesList == null alors typeof countriesList renvoi "object" (c'est une string) et non null.
    Ah, d'accord je n'avais pas compris cette subtilit�.

    Il me semble que c'est soit if (countriesList && countryInput) soit if ( !(countriesList == null || countryInput == null) ) pour ex�cuter le code. Il faut que les deux variables soient valides.

  20. #20
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par d�faut
    Citation Envoy� par moimp Voir le message
    Il faut que les deux variables soient valides.
    Dans ce cas c'est bien un "et logique" (&&) qu'il faut...

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. champ d'un formulaire aliment� par une liste de choix d'un pop-up
    Par jeremili dans le forum G�n�ral JavaScript
    R�ponses: 3
    Dernier message: 03/01/2010, 19h32
  2. R�ponses: 6
    Dernier message: 29/07/2009, 15h31
  3. R�ponses: 3
    Dernier message: 28/03/2008, 18h00
  4. R�ponses: 1
    Dernier message: 20/03/2007, 09h24
  5. [Debutant]Remplacer une liste de valeur par une liste de val
    Par Sebbo dans le forum Collection et Stream
    R�ponses: 3
    Dernier message: 31/03/2006, 12h15

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