2011-08-12 4 views
0

J'aimerais pouvoir affecter le même gestionnaire d'événements à un certain nombre d'éléments div différents. Chaque élément aura un style unique.Mixage des gestionnaires d'événements CSS et Javascript

J'enregistré le eventhandler comme ceci:

<script type="text/javascript"> 

function add_something() { 
    document.getElementById('manipulate').onclick = do_something; 
} 

function do_something(e) { 
this.style.property = value; 
} 

window.onLoad = add_something; 
</script> 

donc je peux assigner un gestionnaire d'événements à un élément comme ceci:

<div id="manipulate"></div> 

Le problème est que je veux attribuer ce gestionnaire à plusieurs éléments, chacun avec un style unique, et je veux utiliser CSS pour le faire. mais je ne suis pas sûr de savoir comment faire ça.

Finalement, je veux quelque chose qui ressemble à ceci:

<style> 
#element1{...} 
#element1{...} 
#element1{...} 
</style> 

.....

<div id="element1" class="manipulate"></div> 
<div id="element2" class="manipulate"></div> 
<div id="element3" class="manipulate"></div> 

Est-ce possible? Merci

+0

window.onLoad fires AVANT que votre HTML ne soit rendu, c'est pourquoi nous utilisons "$ (document) .ready (...)" ce qui signifie que le HTML a été rendu. CSS ne gère pas les événements, JavaScript le fait. L'exemple de Stefan vous montre comment. –

+0

@Diodeus Non, DOM prêt par définition se déclenche avant le chargement de la fenêtre ... –

+0

Btw, 'window.onLoad' ne fonctionne pas - vous devez utiliser les minuscules:' window.onload'. –

Répondre

1

Délégation d'événements?

HTML:

<div id="wrap"> 
    <div id="element1" class="manipulate">First element</div> 
    <div id="element2" class="manipulate">Second element</div> 
    <div id="element3" class="manipulate">Third element</div> 
</div> 

JavaScript:

var wrap = document.getElementById('wrap'); 

wrap.onclick = function (e) { 
    var elem = e.target; 

    elem.style.color = 'red'; 
}; 

démonstration en direct:http://jsfiddle.net/VLcPw/

+0

Merci, cela semble être ce que je cherchais, mais ...Eventuellement, je vais avoir plusieurs autres éléments à l'intérieur de "wrap", des éléments avec des fonctions/événements différents et certains sans aucun événement. Comment pourrais-je exclure ces éléments sans avoir à ajouter un "if" pour chaque élément? – SharpBarb

0

Vous pouvez sélectionner des éléments par classe dans les navigateurs modernes, ou simplement utiliser jQuery et savoir qu'il fonctionne partout.

$(document).ready(function(){ 
    $('.manipulate').click(function(){alert('Hello.')}); 
    //or .hover/any other event. 
}); 

jQuery events.

Peut-être un exemple plus pertinent?

$('.manipulate').click(function(){ 
    $(this).addClass('whateverClass'); 
    //or 
    $(this).css('color', 'red'); 
}); 
+1

-1, tout le monde ne veut pas utiliser jquery, la question veut juste javascript. Il n'y a pas besoin d'une bibliothèque lourde pour cette fonctionnalité simple. – GBa

+0

@Greg: Yup. Je suis sûr que les 500 meilleurs sites Web ne savent pas ce qu'ils font. –

0

Pourquoi vous ne donnez pas jquery un essai?

Avec jquery vous devriez juste besoin de ceci pour se lier à tous les éléments correspondants, le même événement click:



    $("div.manipulate").click(function(e) { 
     $(this).css(property, value); 
    }); 

propriété doit remplacée par une propriété CSS valide, la valeur d'une valeur correcte, bien sûr.

+1

J'essayais d'essayer Javascript en premier. J'apprends encore (comme un passe-temps) et j'ai pensé que je devrais commencer par les bases. JQuery n'est-il pas juste une collection javascript? – SharpBarb

+0

jQuery est un framework génial qui peut vous faire gagner beaucoup de temps, je pense que ça vaut vraiment le coup d'essayer. Mais bien sûr, vous avez raison, vous devriez commencer par javascript de base en premier. –

Questions connexes