Innerhtml et ie7

Résolu
yutfo Messages postés 2 Date d'inscription mercredi 26 novembre 2008 Statut Membre Dernière intervention 29 novembre 2008 - 26 nov. 2008 à 23:31
yutfo Messages postés 2 Date d'inscription mercredi 26 novembre 2008 Statut Membre Dernière intervention 29 novembre 2008 - 29 nov. 2008 à 00:59
Bonjour,
Je suis novice en javascript et j'ai hérité d'un script qui me pose problème avec Internet Explorer 7. Sous Firefox tout va bien. Ce script consiste à générer une liste de cases à cocher plus leur libellé représentant des sous domaines liés à un domaine. Ce dernier est sélectionné à partir d'une liste déroulante.
La liste de sous domaines (fonction du domaine) s'affiche correctement. J'arrive également à cocher les cases de sous-domaines qui m'intéresse. Par contre, lorsqu'il s'agit de tester le nombre de cases cochées, il considère qu'aucune case ne l'est. Je reprécise que sous Firefox tout se déroule parfaitement. D'autre part, ce script comporte innerHtml qui selon certaines sources ne renverrait pas toutes les informations. Ce que j'ai pu vérifier en faisant des tests. En effet sous IE7, je ne retrouve pas l'attribut "name" dans mon "input" contrairement à FF. On préconise d'essayer les standards DOM mais je n'ai très peu de notion la-dessus.
Le script en question est le suivant:

"<script language='javascript'>
$js_categories
function reloadSubCategory(idCate, divSubCate) {
var varCate = document.getElementById(idCate) ;
var varDivSubCate = document.getElementById(divSubCate) ;

cate_id = varCate.options[varCate.selectedIndex].value ;

//alert (arr_categories[cate_id]) ;
varDivSubCate.innerHTML = ' ';
var t = document.createElement('table') ;
for (var i= 0; i< arr_categories[cate_id].length; i++) {
var tr = document.createElement('tr') ;
tr.height='20' ;
var td = document.createElement('td') ;
td.align = 'center' ; td.setAttribute ('width','30');
var cb = document.createElement('input') ;
cb.type='checkbox' ;
cb.name= 'p_subcategory[]' ;
cb.value = arr_categories[cate_id][i][0] ;
cb.id= 'p_subcategory['+cb.value+']' ;
td.appendChild(cb);
tr.appendChild(td);
var td = document.createElement('td') ;
td.align = 'left' ;
td.nowrap = 'yes' ;
td.setAttribute ('width','*');
var lb = document.createElement('label') ;
lb.setAttribute('for','p_subcategory['+arr_categories[cate_id][i][0]+']') ;
lb.innerHTML =arr_categories[cate_id][i][1];
//td.innerHTML = '<label for='+cb.value+']>'++'</label>';
td.appendChild(lb);
tr.appendChild(td);
t.appendChild(tr) ;
}
alert(t.innerHTML) ;
//varDivSubCate.innerHTML = t.outerHTML ;
varDivSubCate.innerHTML ='' + t.innerHTML + '
';

}

Pour mes tests l'attribut 'name' en l'occurrence 'p_subcategory[]' m'est nécessaire car mes tests sont les suivants:

var p_subcategory = document.getElementsByName('p_subcategory[]') ;
var p_subcategory_count = 0 ;
for (i=0; i< p_subcategory.length; i++ ) {
if (p_subcategory[i].checked) p_subcategory_count++ ;
}

if(p_subcategory_count ==0){
alert("<?php echo "Il faut sélectionner au moins 1 sous-domaine";?>");
return false;
}
if(p_subcategory_count > 3){
alert("<?php echo "Il faut sélectionner 3 sous-domaines au plus ";?>");
return false;
}

Je vous remercie d'avance pour votre coup de pouce et je suis ouvert à tout nouveau script qui me permettrait de remplacer celui-ci.

2 réponses

PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
28 nov. 2008 à 12:28
Bonjour,
la méthode préconisée par IExplorer est la suivante

The NAME attribute cannot be set at run time on elements
dynamically created with the createElement method. To create an element with a
NAME attribute, include the attribute and value when using the createElement
method.

en d'autre termes faire comme ceci
var cb =
document.createElement("
c'est très moyen car ça plante avec
les autres navigateurs

Comment faire ?

cb.name = 'p_subcategory[]';
ne marche pas sous
IExplorer , car on défini une propriété et non
un attribut, il n'empêche que ça marche avec les autres.

Il apparaît
donc plus intéressant de passer par setAttribute, seulement voila
cb.setAttribute
('name','p_subcategory[]');
plante encore sous IExplorer, mais pas avec les autres...

On
pète un câble...
mais NON car l'attribut name pour IExplorer est en fait NAME et oui en majuscule...
donc faire
cb.setAttribute
('NAME','p_subcategory[]');
BINGO ça marche, enfin normalement

IExplorer est très subtil en ce qui
concerne les attributs, entre autres d'ailleurs.

Pour être presque
complet sur ton post
<table bgcolor ="#e6effe" border="0" cellpadding="5" cellspacing="0" width="100%">----, On préconise d'essayer les standards
DOM</td>
</td></tr></tbody></table>alors il te
faut créer tes lignes et colonnes avec les fonctions insertRow() et insertCell() entre autres...

Voilou

;O)
3
yutfo Messages postés 2 Date d'inscription mercredi 26 novembre 2008 Statut Membre Dernière intervention 29 novembre 2008
29 nov. 2008 à 00:59
Merçççççççççiiiiiiiii Petole team
j'ai essayé avec setAttribut mais je n'ai jamais pensé à mettre l'attribut 'name' en majuscule.
J'ai fait les modifications et tout fonctionne à merveille, encore merçi pour tes lumières
0
Rejoignez-nous