Je ne peut faire fonctionner ce code sous ce navigateur:
Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.0.13) Gecko/2009082121
Iceweasel/3.0.6 (Debian-3.0.6-1)
Je souhaite ajouter un ᅵvᅵnement 'click' ᅵ une balise du type :
<div id="xx">taratata</div>, mais la balise n'est pas
dans le fichier HTML : Elle est crᅵᅵe en DOM.
Voiᅵi ce que fait le code en gros:
//Creation d'un <div id=fs>[< Agrandir >]</div>
var anewdiv = document.createElement('div');
anewdiv.id='fs';
anewdiv.innerHTML="[< Agrandir >]";
//Maintenant mise en place d'un gestionnaire d'Ev sur ce div
var evType = 'click';
if (anewdiv.addEventListener){//Mozilla ᅵ firefox ᅵ
alert("Mozilla");
anewdiv.addEventListener(evType, function() {alert("TEST!"); } , false);
return true;
}
else if (anewdiv.attachEvent){//IE
alert("IE");
var r =
anewdiv.addEventListerner( "on" + evType, function() { alert("TEST!");});
return r;
}
else {
alert("Impossible de brancher un gestionaire d'ᅵvᅵnements");
return false;//branchement impossible
}
#Ajout de l'ᅵlᅵment ᅵ la page
var beforeElement = document.getElementById("topmenu");
var theParent = beforeElement.parentNode;
theParent.insertBefore(anewdiv, beforeElement);
Le code marche avec IE (je n'ai pas la version) mais pas avec ma version
de firefox.
Avec Firefox, aucune erreur n'est retournᅵe et le gestionnaire d'Ev semble
ᅵtre mis en place,mais le fait de cliquer dans le div ne semble pas opᅵrer.
Aucune erreur dans les traces JavaScript non plus.
Je vous remercie par avance de votre Aide.
Bonsoir,
> Je ne peut faire fonctionner ce code sous ce navigateur:
> Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.0.13) Gecko/2009082121
> Iceweasel/3.0.6 (Debian-3.0.6-1)
J'ai testé avec FF3 sous Windows XP, et le code suivant fonctionne
normalement (je n'ai gardé que la partie FF) :
<body>
<h1>addEventListener</h1>
<p id="test">blabla</p>
<script type="text/javascript">
// Creation d'un <div id=fs>[< Agrandir >]</div>
var anewdiv = document.createElement('div');
anewdiv.id='fs';
anewdiv.innerHTML="[< Agrandir >]";
// Maintenant mise en place d'un gestionnaire d'Ev sur ce div
var evType = 'click';
anewdiv.addEventListener("click",
function() {alert("TEST!")}, false);
// Ajout de l'élément à la page
var beforeElement = document.getElementById("test");
var theParent = beforeElement.parentNode;
theParent.insertBefore(anewdiv, beforeElement);
</script>
</body>
Cordialement,
Pascal
Je met en asolute car relative me fait
n'importe quoi sous IE.
Bon j'ai un msie.css que je peux ajuster.
#fs {
border: 1px solid red;
width: 8em;
right: 5px;
position: absolute;
top: 2.9em;
height: 1em;
background-color: #F0F0CC;
display: block;
font-size: 0.7em;
text-align:center;
}
Que pourrait-ton faire pour que cela soit plus catholique?
(doit marcher avec IE et FF).
Merᅵi Pascal.
Jean-Yves.
Et pourquoi un relative ne serait pas 'top' ?
> Voici les propriᅵtes du <div id="fs">:
>
> Je met en asolute car relative me fait
> n'importe quoi sous IE.
Que veut dire "n'importe quoi" ?
Quel est le contexte ?
Est-ce qu'il y a seulement un doctype sur cette page ?
Et le code HTML employᅵ est-il conforme ᅵ ce doctype ?
Sinon le brouteur (et en particulier IE) passe en quirksmode
(en traitement de soupe de balises, un peu n'importe quoi, quoi)
> Bon j'ai un msie.css que je peux ajuster.
> #fs {
> border: 1px solid red;
> width: 8em;
> right: 5px;
> position: absolute;
> top: 2.9em;
> height: 1em;
> background-color: #F0F0CC;
> display: block;
> font-size: 0.7em;
> text-align:center;
> }
>
> Que pourrait-ton faire pour que cela soit plus catholique?
Sans le reste de la page on ne peut qu'affabuler (ou tout au moins
imaginer)
> (doit marcher avec IE et FF).
et Opera, et Safari, et toutes versions des sus-nommᅵs.
(il nous sera fait grace de IE.5.5 ? Fx.0.9 ? Safari.1.2 ? Opera.6 ?)
En tous cas, mon essai fonctionne impec avec mes :
IE (5.5, 6, 7) Fx3, Safari4, Opera9.6
voir:
<http://cjoint.com/?lycVM42bbZ>
<http://cjoint.com/data/lycVM42bbZ_ajou.htm>
On peut bien mettre la classe 'fs' ᅵ position: absolute;
qui contente aussi tous navigateurs.
Mᅵzalorsse ...
ᅵ quoi bon s'embᅵter ᅵ insᅵrer le div "before" un autre truc ?
Autant l'appendChilder au body.
Nota:
il sera "plus propre" (et logique?)
de n'ajouter l'ᅵcouteur qu'ᅵ la fin :
function ajouter(lieuId) {
// fonction commune IE et autres d'ajout d'ᅵvᅵnement
var adEcoute = function(obj, evenement, action) {
(obj.attachEvent)?
obj.attachEvent('on'+evenement, action) :
(obj.addEventListener)?
obj.addEventListener(evenement, action, false) :
alert('Ajout d\'ᅵcouteur impossible');
}
// Creation d'un div: class=fs [< Agrandir >]
var anewdiv = document.createElement('div');
anewdiv.className = 'fs';
anewdiv.innerHTML = "[< Agrandir >]";
// Ajout de l'ᅵlᅵment ᅵ la page
var beforeElement = document.getElementById(lieuId);
var theParent = beforeElement.parentNode;
theParent.insertBefore(anewdiv, beforeElement);
// Maintenant mise en place d'un gestionnaire d'Ev sur ce div
adEcoute(anewdiv, 'click', function(){alert('Test');});
}
--
sm
D'ailleurs peut-on vraiment appeler ᅵa un "ᅵcouteur"
quand un simple 'onQqueChose' suffit :
var adEcoute = function(obj, evenement, action) {
obj['on'+evenement] = action;
}
fera bien le mᅵme boulot que le longuet :
> var adEcoute = function(obj, evenement, action) {
> (obj.attachEvent)?
> obj.attachEvent('on'+evenement, action) :
> (obj.addEventListener)?
> obj.addEventListener(evenement, action, false) :
> alert('Ajout d\'ᅵcouteur impossible');
> }
function ajouter(lieuId) {
var anewdiv = document.createElement('div');
anewdiv.className = 'fs';
anewdiv.innerHTML = "[< Agrandir >]";
// fonction commune IE et autres d'ajout d'ᅵvᅵnnement
var adEcoute = function(obj, evenement, action) {
obj['on'+evenement] = action;
}
// Ajout de l'ᅵlᅵment ᅵ la page
var beforeElement = document.getElementById(lieuId);
beforeElement.parentNode.insertBefore(anewdiv, beforeElement);
// Maintenant mise en place d'un gestionnaire d'Ev sur ce div
adEcoute(anewdiv, 'click', function(){alert('Test');});
/********
* ou :
* anewdiv.onclick = function(){alert('Test');});
*
**************************************************/
}
--
sm
Le 24/11/2009 09:01, SAM a ᅵcrit :
>
> var adEcoute = [...]
>
> [...]
> adEcoute(anewdiv, 'click', function(){alert('Test');});
Je sais que tu es ᅵ peu prᅵs aussi ᅵ l'aise que moi avec l'anglais, mais
ᅵ ta place j'ᅵcrirais ᅵ add ᅵ plutᅵt que ᅵ ad ᅵ : on ajoute un ᅵcouteur
plutᅵt que d'ᅵcouter des pubs !
Cordialement,
--
Olivier Miakinen
ne dit-on pas 'adjuvant' ?
(pour dᅵsigner un produit ajoutᅵ)
J'aurais peut-ᅵtre dᅵ prᅵfᅵrer 'adjonction'
J'anglicise trᅵs rarement mes noms de variables ou de fonctions,
'anewdiv' est un reliquat du script original.
Si j'eus anglicisᅵ c'eᅵt pᅵt ᅵtre : addLookAt
par exemple
> Cordialement,
Toutafᅵ
--
sm
> --
> sm
Ah, d'accord. Mais dans ce cas il peut ᅵtre utile de savoir comment on
forme des abrᅵviations en franᅵais (abrᅵviations dites rᅵguliᅵres, pas
conventionnelles ni fautives) : en coupant aprᅵs une consonne *et* avant
une voyelle. Cette rᅵgle facilite la lecture des abrᅵviations, mᅵme pour
ceux qui ne la connaissent pas explicitement ! Et donc, on
peut abrᅵger ᅵ adjuvant ᅵ en ᅵ adjuv. ᅵ ou ᅵ adj. ᅵ (sauf dans une
grammaire oᅵ cela signifie ᅵ adjectif ᅵ) mais pas en ᅵ ad ᅵ.
Si tu en as le courage, tu peux lire :
http://www.orthotypographie.fr/volume-I/abreviations-01.html
(je mets surtout le lien pour les passionnᅵs de typographie car c'est un
peu technique...)
> J'aurais peut-ᅵtre dᅵ prᅵfᅵrer 'adjonction'
Pourquoi pas adjEcoute(), voire ajEcoute() pour ᅵ ajout d'ᅵcoute ᅵ ?
>> Cordialement,
>
> Toutafᅵ
Pas mieux
--
Olivier Miakinen
Subject closed: my div clicked zone was hidden by another div.
Thank you very much.
Pim
--
NB: I hate football, and all it represents!
Ha! ha! ... que ne disais-je ? Le contexte !
>> Mᅵzalorsse ...
>> ᅵ quoi bon s'embᅵter ᅵ insᅵrer le div "before" un autre truc ?
>> Autant l'appendChilder au body.
> C'est notᅵ, merᅵi.
D'autant qu'alors, totomatiquement, ᅵa doit rᅵsoudre ton histoire de div
sous-dessus puisque le dernier enfant du body prend le z-index maximal
(il est au-dessus de tout le reste)
>> Est-ce qu'il y a seulement un doctype sur cette page ?
> OUI! HTML 4.0
Ce n'ᅵtait pas acquis d'avance vu le bout de code proposᅵ.
>> En tous cas, mon essai fonctionne impec avec mes :
>> IE (5.5, 6, 7) Fx3, Safari4, Opera9.6
> C'est vrai! => Une armada d'ordinateurs chez soi, ou d'os virtualisᅵs?
un IE-Testeur (4 IEs en un seul) dans une MV XP
les autres sous Mac.
(bientᅵt un Safari-testeur, de la 1.x ᅵ la 3.x)
--
sm