Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

setAttribute me donne du soucis

18 réponses
Avatar
ASM
salutatous,

soit une page qui, à son chargement, doit voir
certains de ses éléments recevoir les events
onClick onMouseOver onMouseOut
donnés par JS suivant ce mode :

C[i].setAttribute('onmouseover',ove,true);
C[i].setAttribute('onclick',clc,true);
C[i].setAttribute('onmouseout',frm,true);

où ove, clc et frm sont les fonctions désirées

Ça roule avec FF, Camino, Safari
Ça ne donne rien avec IE (même pas un onclick)

Le test (et son code) est ici :
http://perso.wanadoo.fr/stephane.moriaux/truc/tables_highlight_cells_fr.htm

test un peu compliqué par des changements de couleurs de fonds dont iCab
fait n'importe quoi.

On se focalisera donc sur la méthode pour faire comprendre à IE
qu'il doit avaler les events sur les cellules
(si ces onqquechose sont dans le code html des TDs,
le onclick est OK
et normal pour IE d'ignorer les onMouse)

--
Stephane Moriaux et son [moins] vieux Mac

10 réponses

1 2
Avatar
Bobe
ASM nous a dit le 06.07.2005 18:26:

C[i].setAttribute('onmouseover',ove,true);
C[i].setAttribute('onclick',clc,true);
C[i].setAttribute('onmouseout',frm,true);



C'est quoi ce troisième argument que tu donnes à la méthode
setAttribute(). Cette méthode n'accepte que deux arguments:

http://www.yoyodesign.org/doc/w3c/dom2/core/core.html#ID-F68F082

Ça ne donne rien avec IE (même pas un onclick)


C[i].onmouseover = ove;
C[i].onclick = clc;
C[i].onmouseout = frm;

--
Aurélien Maille

"la vie d'un geek est un combat perpétuel contre l'imperfection"

Avatar
YD

soit une page qui, à son chargement, doit voir
certains de ses éléments recevoir les events
onClick onMouseOver onMouseOut
donnés par JS suivant ce mode :

C[i].setAttribute('onmouseover',ove,true);
C[i].setAttribute('onclick',clc,true);
C[i].setAttribute('onmouseout',frm,true);

où ove, clc et frm sont les fonctions désirées

Ça roule avec FF, Camino, Safari
Ça ne donne rien avec IE (même pas un onclick)


IE (au moins Windows) supporte très mal le setAttribute
sur les éléments HTML surtout quand l'argument attendu
n'est pas du même type (fonction pour le setAttribute et
chaîne pour l'attribut...).

Le contournement, se servir des
fonctions DOM 0 (qui existe toujours dans le DOM 2 HTML),
à savoir :
C[i].onmouseover = ove; //etc.

--
Y.D.

Avatar
ASM
Bobe wrote:
ASM nous a dit le 06.07.2005 18:26:

C[i].setAttribute('onmouseover',ove,true);


C'est quoi ce troisième argument que tu donnes à la méthode
setAttribute(). Cette méthode n'accepte que deux arguments:


C'est aussi ce qu'il me semblait
j'avais trouvé ce truc sur selfhtml, qui soi-disant était compatible IE4
(de mémoire, car bien sûr, je ne le trouve plus)

de ttes façons avec le 3ième argument, ou sans, même tabac.

C[i].onmouseover = ove;


J'y cours z'essayer

Bon ... j'en reviens et ... j'y arrive pas !

voilà un bout du code utlisé
(highlight_cell(x) et ovlt(x,bool) sont définies par ailleurs)

var C = document.getElementById('myTable').getElementsByTagName('td');
var clc = 'highlight_cell(this)'
var ove = 'ovlt(this,true)'
var frm = 'ovlt(this,false)';
for (var i=0;i<C.length;i++) {
if(document.all)
C[i].onclick = clc; // 'highlight_cell(this)';
else { // ceci est OK : FF, Safari, Camino
C[i].setAttribute('onclick',clc);
C[i].setAttribute('onmouseover',ove);
C[i].setAttribute('onmouseout',frm);
}
}

Je ne dois pas m'y prendre comme il faut.
Le complet revu :
http://perso.wanadoo.fr/stephane.moriaux/truc/tables_highlight_cells_fr.htm

Si qqu'un a un truc tout prêt pour isoler IE
en remplacement de if(document.all)
qui est reconnu par d'autres que IE

--
Stephane Moriaux et son [moins] vieux Mac


Avatar
ASM
YD wrote:

events donnés par JS suivant ce mode :

C[i].setAttribute('onclick',clc,true);

où clc est une fonction désirée

Ça ne donne rien avec IE


Le contournement,
C[i].onclick = clc;


Je croyais que çà y était.
Pas du tout !
je n'y arrive pas :-(

le complet revu en ce sens :
http://perso.wanadoo.fr/stephane.moriaux/truc/tables_highlight_cells_fr.htm


--
Stephane Moriaux et son [moins] vieux Mac


Avatar
Bobe
ASM nous a dit le 06.07.2005 22:39:

Bon ... j'en reviens et ... j'y arrive pas !

var C = document.getElementById('myTable').getElementsByTagName('td');
var clc = 'highlight_cell(this)'
var ove = 'ovlt(this,true)'
var frm = 'ovlt(this,false)';


Mais non, là tu lui files une chaîne à bouffer alors que ce qu'il
attend, c'est une fonction.

for (var i=0;i<C.length;i++) {
if(document.all)
C[i].onclick = clc; // 'highlight_cell(this)';
else { // ceci est OK : FF, Safari, Camino
C[i].setAttribute('onclick',clc);
C[i].setAttribute('onmouseover',ove);
C[i].setAttribute('onmouseout',frm);
}
}



Di diou!

for (var i=0;i<C.length;i++) {
C[i].onclick = clc; // 'highlight_cell(this)';
C[i].onmouseover = ovlt;
C[i].onmouseout = ovlt;
}

Et le début de la déclaration de ta fonction ovlt() :

function ovlt(evt) {
if( !evt ) evt = window.event; // @#*! de MS

Dans la fonction, à la place de "elem", utilise "this".
Pour savoir si la fonction est appelée sur l'évènement mouseover ou
mouseout, vérifie la valeur de evt.type.

--
Aurélien Maille

"la vie d'un geek est un combat perpétuel contre l'imperfection"

Avatar
ASM
Bobe wrote:
ASM nous a dit le 06.07.2005 22:39:

var C = document.getElementById('myTable').getElementsByTagName('td');
var clc = 'highlight_cell(this)'
var ove = 'ovlt(this,true)'
var frm = 'ovlt(this,false)';



Mais non, là tu lui files une chaîne à bouffer alors que ce qu'il
attend, c'est une fonction.


Ben ... ils (ceusses non-IE) ont l'air d'apprécier ;-)

for (var i=0;i<C.length;i++) {
if(document.all)
C[i].onclick = clc; // 'highlight_cell(this)';
else { // ceci est OK : FF, Safari, Camino
C[i].setAttribute('onclick',clc);
C[i].setAttribute('onmouseover',ove);
C[i].setAttribute('onmouseout',frm);
}
}




Di diou!

for (var i=0;i<C.length;i++) {
C[i].onclick = clc; // 'highlight_cell(this)';
C[i].onmouseover = ovlt;
C[i].onmouseout = ovlt;
}


vi vi j'ai essayé !

Et le début de la déclaration de ta fonction ovlt() :

function ovlt(evt) {
if( !evt ) evt = window.event; // @#*! de MS

Dans la fonction, à la place de "elem", utilise "this".


justement 'this' est employé dans l'appel de la fonction
et par le fait désigne l'élément sur lequel elle est appliquée

Pour savoir si la fonction est appelée sur l'évènement mouseover ou
mouseout, vérifie la valeur de evt.type.


ben là, les window events j'y perd mon latin (enfin... si j'en avais)

m'enfin çà ne me résoud pas comment le mouse-window-event
va pouvoir modifier l'élément possédant le onclick
si je n'ai pas l'élément en argument de la fonction lié à cet event

<td onclick="highlight_cell(this)">
<td onclick="highlight_cell(cette cellule)">

En faisant :
function highlight_cell() { // fonction de sur-brillance
if(document.getElementById && document.getElementsByTagName) {
var E = document.getElementById('myTable').getElementsByTagName('td');
var contenu_cellule = this.innerHTML;
alert(contenu_cellule)

si FF ne me signale pas d'erreur dans le code JS,
le clic sur une cellule du tableau me renvoie 'undefined' dans l'alert
La dite cellule n'est donc pas repérée.


--
Stephane Moriaux et son [moins] vieux Mac


Avatar
YD

Le contournement,
C[i].onclick = clc;



Je croyais que çà y était.
Pas du tout !
je n'y arrive pas :-(

le complet revu en ce sens :
http://perso.wanadoo.fr/stephane.moriaux/truc/tables_highlight_cells_fr.htm


Mon IE6 ne digère pas la ligne du innerHTML !!!

Pour ton problème d'évènement, ça fonctionnera avec une modif lègère
si tu écris :

C[i].onclick = Function(clc);

--
Y.D.


Avatar
Jean-Louis Crouzet
YD wrote:

Le contournement,
C[i].onclick = clc;




Je croyais que çà y était.
Pas du tout !
je n'y arrive pas :-(

le complet revu en ce sens :
http://perso.wanadoo.fr/stephane.moriaux/truc/tables_highlight_cells_fr.htm




Mon IE6 ne digère pas la ligne du innerHTML !!!

Pour ton problème d'évènement, ça fonctionnera avec une modif lègère
si tu écris :

C[i].onclick = Function(clc);

Essaie en PHP/Javascript ou direct js


echo " function change(obj, color)n" ;
echo " {n" ;
echo " if (document.all || document.getElementById)
obj.style.background = color ;n" ;
echo " }n" ;

echo "document.writeln("<td
onMouseOver='change(this,"$msbackgnd"); ..... <snip>'
onMouseOut='change(this,"$background")' ..... <snip>
</td>") ;n" ;

Je galère aussi avec MSIE et en plus la taille et le positionnement des
cellules (sans parler des contours) c'est une belle pagaille pour une
compatibilité sur tous les browsers. J'etais et je suis tjrs sur config
du même type via CSS et je n'y arrive toujours pas.

Si quelqu'un dispose d'une soluce élégante je suis preneur.

JL



Avatar
ASM
YD wrote:

le complet revu en ce sens :
http://perso.wanadoo.fr/stephane.moriaux/truc/tables_highlight_cells_fr.htm


Mon IE6 ne digère pas la ligne du innerHTML !!!


Je suppose que c'est le 2ième table (de debugg) écrit par JS ?

RHhhAaaa La LAaaa !
çà lui plait pas l'économie du / ?
Bon, peux-tu voir maintenant si ... ?

Pour ton problème d'évènement, ça fonctionnera avec une modif lègère
si tu écris :

C[i].onclick = Function(clc);


Mais Oui !
(mon truc, fonctionnel maintenant, est en ligne à même url)

Faut que je retrouve ton(tes) post(s) où tu fais le distingo
function
Function
et le toutim à ce propos

--
Stephane Moriaux et son [moins] vieux Mac


Avatar
ASM
Jean-Louis Crouzet wrote:
YD wrote:


Le contournement,
C[i].onclick = clc;





Je croyais que çà y était.
Pas du tout !
je n'y arrive pas :-(

le complet revu en ce sens :
http://perso.wanadoo.fr/stephane.moriaux/truc/tables_highlight_cells_fr.htm





Mon IE6 ne digère pas la ligne du innerHTML !!!

Pour ton problème d'évènement, ça fonctionnera avec une modif lègère
si tu écris :

C[i].onclick = Function(clc);

Essaie en PHP/Javascript



Merci, mais le truc en ligne est un exercice en JS
dont j'aimerais voir sa solution en JS (et sans faire du write)

But de l'exo :
Ne pas charger le code HTML des TDs avec des onclick, onmouseqquechose
mais faire qu'au moins onclick y soit virtuellement présent

L'exo en ligne s'attache par un clic sur une cellule à donner une
couleur de fond identique à toutes les cellules de même contenu.
J'aurais aussi bien pu choisir une autre action.

En addition, et pour les navigateurs le supportant, sont ajoutés
après chargement les mouseqquechose dans les TDs.
Ceci n'étant qu'un exercice, car par simple CSS, on peut obtenir
le même résultat (roll-over) sans ces mousqquechose.

Comme mon IE ne capte pas les mouseqquechose ailleurs que pour un lien
ou une image, dans cet exercice il en est dispensé.

Grâce, en particulier à YD, la solution en JS est trouvée.
Qu'il en soit loué ;-)

echo "document.writeln("<td


non l'écriture directe n'est pas demandée ni voulue

onMouseOver='change(this,"$msbackgnd"); ..... <snip>'
onMouseOut='change(this,"$background")' ..... <snip>
</td>") ;n" ;

Je galère aussi avec MSIE et en plus la taille et le positionnement des
cellules (sans parler des contours) c'est une belle pagaille pour une
compatibilité sur tous les browsers. J'etais et je suis tjrs sur config
du même type via CSS et je n'y arrive toujours pas.

Si quelqu'un dispose d'une soluce élégante je suis preneur.


une soluce pour quoi exactement ?
- dimensions du table ? des cellules ?
http://fr.selfhtml.org/html/tableaux/construction.htm#tete_corps_pied
- bordures (idem)
http://fr.selfhtml.org/html/tableaux/constitution.htm#regles_quadrillage

sinon tu vas là :
http://fr.selfhtml.org/navigation/recherche/index.htm
et dans le champ de recherche tu tapes : css table


--
Stephane Moriaux et son [moins] vieux Mac




1 2