это действительно зависит от того, что вы подразумеваете под событиями для классов. Вы имеете в виду, что класс должен запускать события для экземпляра (через миксин Events) или иметь события запуска Element для класса / прикреплять события к узлам dom по классу. Имея это в виду, вот пример, который делает и то, и другое: устанавливает универсальный обработчик событий через DOM внутри класса, а также заставляет класс уведомлять экземпляр о щелчке, чтобы вы могли переопределить функциональность из вашего экземпляра экземпляра.
по отношению к вашему сообщению в другой теме:
var new_Div = new Class({
// use Options and Events mixins
Implements: [Options, Events],
// define defaults that you can override
options: {
parentNode: document.body, // can point to your input
injectPosition: "top", // bottom, after (to show after input), before
width: 200,
height: 160,
border: "1px dashed red",
html: ""
},
initialize: function(name, options) {
// set defaults
this.setOptions(options);
// where to inject?
this.parent = document.id(this.options.parentNode);
if(!this.parent)
return; // does not exist - domready?
// create the element
this.element = new Element("div", {
id: name + "_div",
html: this.options.html,
styles: {
width: this.options.width,
height: this.options.height,
border: this.options.border
},
events: {
click: this.handleClick.bind(this)
}
});
// inject into dom at the parent node and position
this.element.inject(this.parent, this.options.injectPosition);
},
handleClick: function(event) {
// called when clicked on the div
if (event && event.stop)
event.stop();
// you can do stuff here
alert("hi from element event handler");
// or delegate it to the instance like so:
this.fireEvent("clicked", event || {});
}
});
new new_Div("test", {
html: "hello",
onClicked: function() {
// handle the custom "clicked" event on the instance
alert("hi from class instance event");
}
});
здесь это работает: http://jsfiddle.net/dimitar/cgDrG/
и, наконец, рассмотрите возможность использования toElement , который позволяет вам рассматривать экземпляр класса как элемент dom и экспортировать созданный вами div - рабочий пример, полезный для форм и т. Д.
var new_Div = new Class({
// use Options and Events mixins
Implements: [Options, Events],
// define defaults that you can override
options: {
width: 200,
height: 160,
border: "1px dashed red",
html: ""
},
initialize: function(name, options) {
// set defaults
this.setOptions(options);
// create the element
this.element = new Element("div", {
id: name + "_div",
html: this.options.html,
styles: {
width: this.options.width,
height: this.options.height,
border: this.options.border
},
events: {
click: this.handleClick.bind(this)
}
});
},
handleClick: function(event) {
// called when clicked on the div
if (event && event.stop) event.stop();
// you can do stuff here
alert("hi from element event handler");
// or delegate it to the instance like so:
this.fireEvent("clicked", event || {});
},
toElement: function() {
// the class will return this.element if called through $
return this.element || null;
}
});
var foo = new new_Div("test", {
html: "hello",
onClicked: function() {
// handle the custom "clicked" event on the instance
alert("hi from class instance event");
}
});
// inject this.element through toElement into dom.
$(foo).inject(document.id("your_name"), "after");
это правильный синтаксис для использования в mootools, ваши строки не совсем хорошие практики. Кроме того, это ваш второй вопрос за столько дней. рассмотрите возможность сделать вашу учетную запись постоянной и принять некоторые ответы.
вот практический пример с мини-классом валидатора, который проверяет наличие обязательных полей и запускает экземпляр класса поля ошибок, если он не удовлетворен: http://jsfiddle.net/dimitar/cgDrG/5/