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éclenchement auto d'une fonction sans intervention humaine


Sujet :

JavaScript

  1. #1
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut Déclenchement auto d'une fonction sans intervention humaine
    Bonjour,

    J'ai un champ sur mon html comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="input" name="tiers_nom_id" id="tiers_nom_id"/>
    Ce champ est alimenté par une fonction ajax.

    Je veux que lorsque la valeur de ce champ change une fonction javascript se déclenche (récupération de l'adresse et alimentation de mon formulaire automatiquement).

    Je ne peux pas mettre "onchange" ou "onclick" puisque je n'interviens pas sur ce champ.

    J'ai pensé au "onload" avec un appel en boucle en attendant le changement, mais je vais charger en permanence mon adresse.

    Quelle fonction pourrai-je utiliser ?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 882
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 882
    Points : 16 286
    Points
    16 286
    Par défaut
    Tu peux essayer de ruser en faisant un truc dans le genre :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <body onload="setTimeout(function(){document.getElementById('truc').value='test';document.getElementById('truc').focus();}, 3000)">
       <input type="text" id="truc" onfocus="alert('coucou')" />
    </body>

    (Le setTimeout n'est là que pour voir à l'oeil nu les opération effectuées)

  3. #3
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Merci,

    J'avais mis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <body onload="ajaxAutoTiersGenAdr()">
    Et dans ma fonction :

    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
    function ajaxAutoTiersGenAdr()
    {
    	var xmlhttp = null;
     
    	try{
    	   xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    	}
    	catch(e){
    	   try{
    	      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    	   }
    	   catch(e){
    	      xmlhttp = false;
    	   }
    	}
     
    	if (!xmlhttp && typeof XMLHttpRequest!='undefined'){
    	   xmlhttp = new XMLHttpRequest();
    	}
     
        //on appelle le fichier reponse.txt
        xmlhttp.open('GET', '../ajax/ajaxAutoTiersGenAdr.php?param1='+document.getElementById('tiers_nom_id').value,false);
        xmlhttp.send(null);
     
        var items = xmlhttp.responseXML.getElementsByTagName('donnee');
    	//on fait juste une boucle sur chaque element "donnee" trouvé
    	for (i=0;i<items.length;i++)
    	{
    		alert (items.item(i).firstChild.data);
    	}
        setTimeout("ajaxAutoTiersGenAdr()",1000); 
    }
    Donc je boucle, mais en fin de compte c'est ce que tu me propose aussi, non ?

    Sachant que mon champ de formulaire est en fait en hidden

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="hidden" name="tiers_nom_id" id="tiers_nom_id"/>

  4. #4
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    En final cela donne :

    Il est important de tester le changement de valeur de l'id recherché.

    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
    // Définition de la variable globale permettant de savoir s'il y a eu changement de la valeur de l'id du tiers
    // Ainsi le chargement des champs du formulaire ne se fait que si l'id a changé
    var wid_change = '';
     
    function ajaxAutoTiersGenAdr()
    {
    	var xmlhttp = null;
     
    	try{
    	   xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    	}
    	catch(e){
    	   try{
    	      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    	   }
    	   catch(e){
    	      xmlhttp = false;
    	   }
    	}
     
    	if (!xmlhttp && typeof XMLHttpRequest!='undefined'){
    	   xmlhttp = new XMLHttpRequest();
    	}
     
    	// Test du changement de l'id
    	// La 1ère fois wid_change est à ''
    	if(document.getElementById('id').value!= wid_change)
    	{
    		wid_change = document.getElementById('id').value;
     
    	    //on appelle le fichier reponse.txt
    	    xmlhttp.open('GET', '../ajax/ajaxAutoTiersGenAdr.php?param1='+document.getElementById('id').value,false);
    	    xmlhttp.setRequestHeader('User-Agent', 'Adresse du Tiers');
    	    xmlhttp.setRequestHeader('Accept', 'text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.7,*/*;q=0.1');
    	    xmlhttp.send(null);	
     
    	    if(xmlhttp.status == 200)
    	    {
    		    var items = xmlhttp.responseXML.getElementsByTagName('donnee');
    			//on fait juste un transfert sur chaque element "donnee" trouvé
    			if(items.item(0))
    			{
    				if(items.item(0).firstChild!= null)
    				{
    					document.getElementById('tiers_nom').value=items.item(0).firstChild.data
    				}
    			}
    			if(items.item(1))
    			{
    				if(items.item(1).firstChild!= null)
    				{	
    					document.getElementById('tiers_adr1').value=items.item(1).firstChild.data
    				}
    			}		
    			...
    		}
    	}
        setTimeout("ajaxAutoTiersGenAdr()",1000); 
    }
    Et c'est au poil, pile ....

    Merci

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

Discussions similaires

  1. Comment sortir d'une fonction sans nom ?
    Par kriekbellevue dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 23/11/2007, 15h00
  2. Réponses: 3
    Dernier message: 01/05/2007, 12h03
  3. Appeler juste une fonction sans include
    Par laurent_ifips dans le forum Langage
    Réponses: 5
    Dernier message: 22/11/2005, 23h08
  4. Signature d'une fonction sans argument
    Par cj227854 dans le forum C++
    Réponses: 5
    Dernier message: 20/10/2005, 17h01
  5. Création d'une fonction sans paramètre?
    Par falcon dans le forum Oracle
    Réponses: 3
    Dernier message: 13/12/2004, 11h32

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