2009-07-16 4 views
1

Il me vient à l'esprit qu'il serait extrêmement agréable de pouvoir appliquer du code javascript comme vous pouvez appliquer CSS.Appliquer javascript aux pages comme nous appliquons css ... ne serait-ce pas gentil?

Imaginez quelque chose comme:

/* app.jss */ 
div.closeable : click { 
    this.remove(); 
} 

table.highlightable td : hover { 
    previewPane.showDetailsFor(this); 
} 

form.protectform : submit { } 
links.facebox : click {} 
form.remote : submit { 
    postItUsingAjax()... } 

Je suis sûr qu'il ya de meilleurs exemples.

Vous pouvez faire des choses assez similaires avec sur dom: loadad -> $$ (foo.bar) .onClick (mais cela ne fonctionnera que pour les éléments présents sur dom: loadad) ... etc. Mais ayant un fichier jss serait vraiment cool. Eh bien, cela doit être une question, pas un braindump ... alors ma question est: y at-il quelque chose comme ça?

Appendum

Je sais Jquery et prototype permettent de faire des choses semblables avec des aides de $$ et pratique pour attraper les événements. Mais ce que je n'aime parfois pas dans cette variante, c'est que le gestionnaire ne s'installe que sur les éléments qui ont été présents lors du chargement du site.

+0

Une meilleure syntaxe était constituée de pseudo-sélecteurs tels que ': click' et': hover'. – Gumbo

+0

J'aime mieux votre syntaxe, mais encore une fois, voir les événements en direct de jQuery comme liés dans ma réponse ci-dessous. Ils fonctionnent au-delà de ce qui est présent au chargement DOM. –

+0

Le système d'événements en direct a l'air bien! – reto

Répondre

7

La chose la plus proche que je l'ai vu à ce que vous parlez sont des événements en direct jQuery:

http://docs.jquery.com/Events/live

Ils essentiellement ramasser de nouveaux éléments car ils sont créés et ajoutez le code de gestionnaire approprié Vous avez affecté

+1

Exactement. Cela répond à la fois à la question initiale et à l'avis. Live réévaluera les sélecteurs et appliquera le javascript associé chaque fois que le DOM changera. –

2

Vous devriez regarder dans jQuery. Je n'ai pas le luxe d'utiliser où je travaille, mais il ressemble à ceci:

$("div.closeable").click(function() { 
    $(this).remove(); 
}); 

Ce n'est pas trop loin de votre premier exemple.

+0

$ ('div.closeable'). Bind ('click', function() {this.remove();}); fonctionnerait ... en supposant que les éléments DOM réels avaient une méthode .remove() attachée à eux. – scunliffe

+2

pour fonctionner complètement comme le fait CSS ... vous voudriez utiliser l'option .live() pour capturer les futurs éléments créés. – scunliffe

0

Jetez un oeil à jquery. Vous pouvez avoir un fichier .js que vous ajoutez à toutes vos pages et obtenir quelque chose de très proche de ce que vous décrivez.

Le plus gros piège serait la performance.

Questions connexes