GNT sans publicité, site mobile, fonctionnalitées exclusives...

.addEventListener('click', function() {alert("TEST!"); } , false);

Le
Pim
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)

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.
Lire les 11 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Pascal
Le #20618201
Pim a écrit :
Bonsoir,



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
Pim
Le #20618271
Le Mon, 23 Nov 2009 22:42:18 +0100,
Pascal
Pim a écrit :
Bonsoir,



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


Merci d'avoir testé pour moi.
je regarde.....
Pim
Le #20618491
Le Mon, 23 Nov 2009 22:42:18 +0100,
Pascal
Pim a écrit :
Bonsoir,



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



Effectivement!
En fait le code js est bon et fonctionne!!!
C'est du à la propriété de mon div dans mon fichier css.
La zone de click doit être décallée ou masquée
et en la mettant en relative
j'arrive à cliquer dessus mais c'est pas top.
Voici les propriétes du <div id="fs">:

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.
SAM
Le #20619191
Le 11/23/09 11:25 PM, Pim a écrit :
En fait le code js est bon et fonctionne!!!
C'est du à la propriété de mon div dans mon fichier css.
La zone de click doit être décallée ou masquée
et en la mettant en relative
j'arrive à cliquer dessus mais c'est pas top.



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:

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
SAM
Le #20619671
Le 11/24/09 3:09 AM, SAM a écrit :

Nota:
il sera "plus propre" (et logique?)
de n'ajouter l'écouteur qu'à la fin :



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
Publicité
Suivre les réponses
Poster une réponse
Anonyme