Récuperation du Focus sur un Input apres mise a jour du div via Ajax

cs_izy Messages postés 4 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 18 août 2007 - 16 août 2007 à 15:09
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 - 18 août 2007 à 12:27
Bonjour, mon problème est le suivant je bosse actuellement sur une page qui fais des ajoute/suppression/motification dans une base mysql et j'aurais besoin que apres chaque envoi au serveur via ajax à l'aide de la méthode Ajax.Updater d'un div qui est en gros le contenu du site a mettre a jour le focus revienne sur un champ input de cette fameuse div contenant le contenu modifier et qui  était déjà presente elle avant la mise a jour.
J'ai bien essayer mais en vint de mettre en javascript document.getElementById('input').Focus(); dans le code php me permettant l'affichage de cette div mais cela ne fonctionne que la premier e fois que le div a été charger mais à la premiere soumission le Focus est perdu

J'espère avoir été clair et vous remerci d'avant pour vos reponse.

8 réponses

cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
16 août 2007 à 15:22
Bonjour,

c'est focus()   pas Focus()
le faire bien entendu quand xmlhttprequest a répondu
(    probablement dans la fonction xml.onreadystatechange )

sinon.. ça baigne.

   

<script type=text/javascript">
    document.getElementById("toto").focus();
</script>

<hr />



Cordialement                Bul         [mon Site]     [M'écrire]







<hr />





Généralement, c'est absurde de généraliser.
0
cs_izy Messages postés 4 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 18 août 2007
16 août 2007 à 15:48
Déjà merci de ta réponse, d'autant plus aussi vite!!

Désolé pour la faute de frappe sur focus()!!

Par contre j'ai pas bien compris:

le faire bien entendu quand xmlhttprequest a répondu
(    probablement dans la fonction xml.onreadystatechange )

0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
16 août 2007 à 16:03
si tu met à jour ce div avec ajax,
    il faut attendre qu'ajax fasse son boulot ( transmission de la demande,
    traitement coté serveur, transmission de la réponse ... )

tu parles de la méthode (??) Ajax.Updater
    tu dois utiliser ce qu'on appelle ( de manière abusive ! ) un framework

    c'est "sûrement" une simple fonction ( en javascript ), qui "doit" contenir
       une ligne du style


xml
.onreadystatechange= function()...
       dans cette fonction, on "doit" tester xml .readyState == 4
       ce qui veut dire qu'Ajax ( xmlhttprequest ) a répondu.
       c'est là que tu peux mettre le focus()





<hr />




Cordialement                Bul         [mon Site]     [M'écrire]
<hr />


Généralement, c'est absurde de généraliser.
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
16 août 2007 à 16:06
ou le framework ne rend la main à ton script que
    lorsque la réponse d'ajax est revenu ( je ne peux pas savoir )
dans ce cas met le focus() après l'appel de
Ajax.Updater



<hr />




Cordialement                Bul         [mon Site]     [M'écrire]
<hr />


Généralement, c'est absurde de généraliser.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_izy Messages postés 4 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 18 août 2007
16 août 2007 à 23:24
J'ai essayer comme tu me l'avais conseillé de redonner le focus juste apres l'appel à Ajax.updater mais en vint je ne recupere pas le focus. Aurais tu une autre idée pour moi? 
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
17 août 2007 à 06:24
>>redonner le focus juste apres l'appel à Ajax.updater

    donc, soit tu ne fais pas tout à fait comme il faut
    soit la fonction te rend la main avant le retour de xmlhttprequest

>>Aurais tu une autre idée pour moi?

    je me cite :

    ...une ligne du style


xml
.onreadystatechange= function()...
       dans cette fonction, on "doit" tester xml .readyState == 4
       ce qui veut dire qu'Ajax ( xmlhttprequest ) a répondu.
       c'est là que tu peux mettre le focus()...







<hr />




Cordialement                Bul         [mon Site]     [M'écrire]
<hr />


Généralement, c'est absurde de généraliser.
0
cs_izy Messages postés 4 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 18 août 2007
18 août 2007 à 11:38
Je suis vraiment désolé d'abuser de votre gentillesse mais vrai j ai un problème car je suis parti regarder le code du framework et je ne trouve pas la ligne dont vous me parliez au niveau de l updater:

Ajax.Updater = Class.create();

Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), {
  initialize: function(container, url, options) {
    this.container = {
      success: (container.success || container),
      failure: (container.failure || (container.success ? null : container))
    }

    this.transport = Ajax.getTransport();
    this.setOptions(options);

    var onComplete = this.options.onComplete || Prototype.emptyFunction;
    this.options.onComplete = (function(transport, param) {
      this.updateContent();
      onComplete(transport, param);
    }).bind(this);

    this.request(url);
  },

  updateContent: function() {
    var receiver = this.container[this.success() ? 'success' : 'failure'];
    var response = this.transport.responseText;

    if (!this.options.evalScripts) response = response.stripScripts();

    if (receiver = $(receiver)) {
      if (this.options.insertion)
        new this.options.insertion(receiver, response);
      else
        receiver.update(response);
    }

    if (this.success()) {
      if (this.onComplete)
        setTimeout(this.onComplete.bind(this), 10);
    }
  }
});

et je voudrais savoir si il était possible de m'aiguiller encore une fois.
Si jamais vous avez besoin de plus d'information concernant le fichier contenant se code vous pouvais le telecharger sur http://www.prototypejs.org/download ou bien alors je peux vous le copier coller ici

Encore merci pour vos réponse et désolé de vous redéranger.
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
18 août 2007 à 12:27
>>désolé de vous redéranger.
    y'a pas d'dérangement !

>>prototypejs
    ah, c'est lui. je n'avais jamais regardé.
    ça me semble bien compliqué, mais
    ce doit être normal compte tenu des fonctionnalités.

    vous êtes obligé d'utiliser pour AJAX ?

    oui : recherchez les lignes ( doit pas y en avoir une foultitude )
                        contenant

onreadystatechange ? peut-être...

    non : un "échange ajax", c'est "assez simple"
       il existe    de nombreux exemples sur CodesSources ( et même ailleurs )
           comme de nombreuses explications/tutos.

       j'ai sous la main, alors, un ch'tit début :

   function xmlhttp()
   {  var x;
      try             {  x = new ActiveXObject("Microsoft.XMLHTTP");   }
      catch (e)   {  try               {   x = new ActiveXObject("Msxml2.XMLHTTP");   }
                           catch (e)     {   try            {   x = new XMLHttpRequest();   }
                                                 catch (e)    {   x=false;   }
                                               }
                        }
      return x;
   }

   function appel()   // appel au script sur le serveur, peut-être remplaçant votre Ajax.updater ?
   {   var xml = xmlhttp();
        if(!xml)
                 {   alert("XmlHttpRequest non supporté");   }
       else   {   xml.onreadystatechange = function()
                 {   if(xml.readyState==4)
                     {   ici on peut gérer xml.responseText ou xml.responseXML
                          c'est la réponse du serveur.
                     }
                  }
//    soit méthode get :
                  xml.open("GET", "url de la page?paramètres



éventuels






",true);
                  xml.send(null);

//    soit méthode post :








                  xml.open("POST", "url de la page",true);

                  xml.send("




paramètres éventuels




");







             }
   }     



<hr size="2" width="100%" />




    ben oui.... c'est tout, enfin : coté client.




<hr />



Cordialement                Bul         [mon Site]         [M'écrire]<hr />

En général, c'est absurde de généraliser.
0
Rejoignez-nous