Forums Développement Multimédia

Aller au contenu

Probleme CheckBox généré en AJAX

CODE Ajax JQuery EaseJs

7 réponses à ce sujet

#1 EvEr

    Ceinture Orange

  • Members
  • PipPipPip
  • 33 messages

Posté 21 June 2007 - 11:03 AM

Bonjour,
j'ai un petit probleme, lorsque je genere des checkbox en ajax, les checkbox apparraissent bien, mais le texte non..... pourtant lorsque j'affiche la source de ma page, les texte sont bien present.

En fiochier lien, il y a un petit screen du probleme sur browser web. Aussi, voici les differents codes:
Voici la fonction ajax qui genere les checkbox

CODE
function afficherResultatsAFFEC(obj)
{
     // Construction des noeuds
      var tabResult = obj.responseXML.getElementsByTagName('resultat');
     //document.getElementById('zoneResultatsBanc').innerHTML = '';
     with(document.getElementById('affectation').style) {
               visibility = 'visible';
         };
     if (tabResult.length > 0) {

            for (var i = 1; i < tabResult.length; i++) {
               resultat = tabResult.item(i); // on defini resultat
               var li = document.createElement('li');    // on crée la balise <li>
               var egt = document.createElement('input');    // on crée le lien <input />
               var texte = document.createTextNode(resultat.getAttribute('titre'));    // on crée le texte a afficher
               egt.appendChild(texte);    // on associe le texte au lien <input />texte
               egt.setAttribute('type', 'checkbox'); // on defini le style de input ici checkbox
               egt.setAttribute('name', resultat.getAttribute('titre')); // on fixe le nom <input name="texte" />texte
               egt.setAttribute('value', resultat.getAttribute('titre'));    // on fixe la valeur <input name="texte" value="texte" />texte
               li.appendChild(egt);    // on associe le lien au li <li><input name="texte" value="texte" />texte</li>
               document.getElementById('affectation').appendChild(li);    // on affiche le tout
               alert('voici le code ' + document.getElementById('affectation').appendChild(li));
          }
     }
}

function loadDataAFFEC() {

     var XHR = new XHRConnection();
     XHR.appendData("ETAGE", document.getElementById('ETAGE').value);
     XHR.appendData("SITE", document.getElementById('SITE').value);
     XHR.sendAndLoad("fonctions/search_affect.php", "POST", afficherResultatsAFFEC);
}


voici le code html

CODE
<tr>
    <td colspan=\"4\">    
        <ul id=\"affectation\"></ul>    
    </td>
</tr>


voici la source

CODE
<tr>
    <td colspan="4">
        <ul style="visibility: visible;" id="affectation">
            <li><input value="1XX_VISIONNAGE W9 - 522" name="1XX_VISIONNAGE W9 - 522" type="checkbox">1XX_VISIONNAGE W9 - 522
            </li>
        </ul>
    </td>
</tr>


pourtant rien ne s'affiche. Le probleme se pose sur FF et sous IE donc je pense que c'est un probleme au niveau du code.

Merci encore a ceux qui essayerons de comprendre mon probleme gourou.gif

#2 EvEr

    Ceinture Orange

  • Members
  • PipPipPip
  • 33 messages

Posté 21 June 2007 - 13:45 PM

Bon c'est bon, j'ai trouver en fait mon probleme etait dans mon code ajax,pe probleme venait du fait de faire des appendChild à tout va.
Afin de corriger le probleme il fallait juste faire ca :

CODE
function afficherResultatsAFFEC(obj)
{
     // Construction des noeuds
      var tabResult = obj.responseXML.getElementsByTagName('resultat');
     if (tabResult.length > 0)
    {
        for (var i = 0; i < tabResult.length; i++)
        {
                 resultat = tabResult.item(i); // on defini resultat
                       var egt = document.createElement('input');    
                var champ = document.createElement('input');
            var texte = document.createTextNode(resultat.getAttribute('titre'));
            var br = document.createElement('br');
            egt.appendChild(texte);    
                       egt.setAttribute('type', 'checkbox');
               egt.setAttribute('name', resultat.getAttribute('titre'));
                egt.setAttribute('value', resultat.getAttribute('titre'));
                champ.setAttribute('type', 'text');
               champ.setAttribute('value', resultat.getAttribute('titre'));
               champ.style.readonly = 'readonly';
               document.getElementById('affectation').appendChild(egt);    
               document.getElementById('affectation').appendChild(texte);
               document.getElementById('affectation').appendChild(br);
               }
         }
}


#3 EvEr

    Ceinture Orange

  • Members
  • PipPipPip
  • 33 messages

Posté 22 June 2007 - 08:28 AM

Rebonjour a tous,

J'ai un nouveau probleme avec mes checkbox, je profite de ce topic pour vous expliquer mon probleme :

Toujour sur mes checkbox, elles s'affichent bien, mais là le probleme vient du formulaire.
Lorsque je le valide, il ne me renvoie pas les valeur des checkbox...
lorsque je valide par exemple la premiere checkbox, je devrais recupérer quelque chose comme ca :

array(4)
{
["SITE"]=> string(2) "14"
["ETAGE"]=> string(2) "-1"
[0]=> string(22) "-1XX_REGIE METEO - 500"
["Supprimer"]=> string(35) "Supprimer une ou des affectation(s)"
}

mais je recupere ca icon_eek.gif :

array(4)
{
["SITE"]=> string(2) "14"
["ETAGE"]=> string(2) "-1"
["Supprimer"]=> string(35) "Supprimer une ou des affectation(s)"
}

Et en fait, ce qui est le plus étonnant, c'est que mon script marche correctement sous IE et pas sous FF....

voici les differents code utilisé :

le formulaire :
CODE
$output = "<table border=\"1\" width=\"390\">
            <form id=\"suppr_affect\" method=\"post\" action=\"#\">
                <tr>
                    <td>
                        Batiment :
                    </td>
                    <td>";
                        $request = "SELECT * from SITES";
                        $result = execute_requete_query_bdd($request);
                        $output .= "<div id=\"champ\">
                            <select name=\"SITE\" id=\"SITE\"  onChange=\"loadDataLieu()\" >\n<option></option>";
                        while ($row2 = mysql_fetch_object($result))
                        {
                            $output .= "<option value=\"" .$row2->SITES . "\">" . $row2->SITES . "</option>\n";
                        }
                        if(isset($row->SITE) )
                            {
                                $output .= "<option value=\"" .$row->SITE . "\" selected>" . $row->SITE . "</option>\n";
                            }
                        $output .= "</select></div>
                    </td>
                    <td>
                        Etage :
                    </td>
                    <td>
                        <select id=\"ETAGE\" name=\"ETAGE\" onChange=\"loadDataAFFEC()\" style=\"visibility: visible;\">
                    </td>
                </tr>
                <tr>
                    <td colspan=\"4\">
                        <div id\"titre_affectation\"></div>
                        <div id=\"affectation\">                <!-- check box généré via AJAX -->
                        </div>
                    </td>
                </tr>
                <tr>
                    <td colspan=\"4\">
                        <input type=\"submit\" name=\"Supprimer\" value=\"Supprimer une ou des affectation(s)\">
                    </td>
                </tr>
            </form>
            <form>
                <tr>
                    <td colspan=\"4\">
                        <input type=\"text\" name=\"ajout\" />
                    </td>
                </tr>
                <tr>
                    <td colspan=\"4\">
                        <input type=\"submit\" name=\"Ajouter\" value=\"Ajouter une Affectation\">
                    </td>
                </tr>
            </form>
        </table>    ";
    echo $output;


et revoici l'AJAX

CODE
function afficherResultatsAFFEC(obj)
{
     // Construction des noeuds
      var tabResult = obj.responseXML.getElementsByTagName('resultat');
     if (tabResult.length > 0) {
            for (var i = 0; i < tabResult.length; i++)
            {
               resultat = tabResult.item(i); // on defini resultat
               var egt = document.createElement('input');    // on crée le lien <input>
               var champ = document.createElement('input'); // on crée le champ <input>
               var texte = document.createTextNode(resultat.getAttribute('titre'));    // on crée le texte a afficher
               var br = document.createElement('br');
               //egt.appendChild(texte);    // on associe le texte au lien <input />texte
               egt.setAttribute('type', 'checkbox'); // on defini le style de input ici checkbox
               egt.setAttribute('name', i); // on fixe le nom <input name="texte" />texte
               egt.setAttribute('value', resultat.getAttribute('titre'));    // on fixe la valeur <input name="texte" value="texte" />texte
               champ.setAttribute('type', 'text');
               champ.setAttribute('value', resultat.getAttribute('titre'));
               champ.style.readonly = 'readonly';
               //champ.appendChild(egt);
               document.getElementById('affectation').appendChild(egt);    // on affiche le tout
               document.getElementById('affectation').appendChild(texte);
               document.getElementById('affectation').appendChild(br);
          }
          var br = document.createElement('br');
           document.getElementById('affectation').appendChild(br);
     }
}

function loadDataAFFEC()
{
     var XHR = new XHRConnection();
     XHR.appendData("ETAGE", document.getElementById('ETAGE').value);
     XHR.appendData("SITE", document.getElementById('SITE').value);
     XHR.sendAndLoad("fonctions/search_affect.php", "POST", afficherResultatsAFFEC);
}


#4 virginiebourgeaux

    Ceinture Blanche

  • Members
  • Pip
  • 8 messages

Posté 09 July 2008 - 16:30 PM

bonjour,

je sais que cela fait longtemps, mais as-tu trouvé pourquoi on ne récupère pas leur valeur ?
j'ai essayé avec $_REQUEST, avec $_POST, j'ai essayé avec des appendChild et avec du innerHTML, rien n'y fait...

merci d'avance


#5 virginiebourgeaux

    Ceinture Blanche

  • Members
  • Pip
  • 8 messages

Posté 09 July 2008 - 16:43 PM

pour info, j'ai triché pour m'en sortir, j'ai créé en dur des chp hidden que je rempli en fonction de mes choix et ce sont les hidden que je traite.
Mais j'aimerais quand mm bien comprendre pourquoi les checkbox ne passent pas alors qu'avec des select ou des hidden générés en ajax, cela fonctionne ...

merci

#6 Ldo

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 9921 messages

Posté 10 July 2008 - 10:46 AM

il y a un autre sujet qui traite du même problème sur le forum
et de mémoire on n'avais pas poussé plus loin

chez certain aucun problème pour récup les valeur de chkbox, et pour d'autre aucune valeur transmise
une différence dans la manière de traiter l'ajax probablement
comme la personne avait finie par résoudre son pbm, on a pas cherché plus loin ...

#7 virginiebourgeaux

    Ceinture Blanche

  • Members
  • Pip
  • 8 messages

Posté 10 July 2008 - 16:52 PM

j'ai vu l'autre message et sur d'autres forums aussi, il y a ce genre de question, mais tjs une parade au lieu d'une réponse ...
tant pis, je ne comprendrai pas cette fois, ça m'embête quand même.
juste comme ça, une idée, dans la logique de "si c'est lu après c'est traité après", est-ce que, par hasard, FF ne stockerait pas ces input après le </form> dans sa mémoire et du coup ne les enverrait pas car il lirait ses données dans l'ordre ?
d'un autre côté pourquoi faire ça pour l'objet input et pas pour des select ou autres ?

ps : il est marrant ton bonhomme ... wink.gif


#8 algaute

    Ceinture Blanche

  • Members
  • Pip
  • 2 messages

Posté 26 November 2008 - 14:28 PM

Salut,

Dans FF 3, la position de la balise <FORM> est importante. Essaye de la mettre juste après la balise <BODY>. J'ai eu le même problème que j'ai résolu de la sorte



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP