Две функции — bind и listen. Функция bind предназначена для создания callback-функции, чтобы получить возможность использования внутренних методов объекта в обработке событий. Функция listen предназначена для кроссбраузерного назначения обработчика события объекту.
Две примитивные функции
27 декабря 2007 года, 22:41/*
toObject - объект для привязки
methodName - имя метода внутри объекта (передаётся строкой)
*/
function bind(toObject, methodName)
{
return function(e){toObject[methodName](e)}
}
/*
object - объект для прослушивания события
hevent - название события (строка)
hfunc - метод-обработчик
*/
function listen(object, hevent, hfunc)
{
if (object.addEventListener)
object.addEventListener(hevent,hfunc,false);
else if (object.attachEvent)
object.attachEvent('on'+hevent,hfunc);
}
- Теги:
- javascript
- программирование
Мнения (11)
Все эти хорошие люди уже прокомментировали запись. Поделитесь собственным мнением, расскажите, что вы думаете о поставленной проблеме, задаче, озвученных мыслях.
-
28 декабря 200709:08
в listen можно дописать else return false.
Методически это будет красивее. Да и мало ли какой браузер попадется. - 28 декабря 200709:54 Методически красивее - согласен. Сейчас если не то и не это, будет просто возвращён null.
- 28 декабря 200716:46 а если то или это, что будет возвращено?
- 28 декабря 200716:51 Понял, к чему вы клоните, товарищ.
-
28 декабря 200717:11
пока что мне это видится вот так (хоть и чувствую, что это не идеально):
[code=js]
function listen(object, hevent, hfunc){
var result = false;
if(object.addEventListener){
object.addEventListener(hevent, hfunc, false);
result = true
}
else{
if(object.attachEvent){
object.attachEvent('on' + hevent, hfunc);
result = true
}
}
return result
}
[/code] - 28 декабря 200717:16 Не обязательно возвращать результат. Есть другие способы узнать, назначился ли верно обработчик. Причём, иные способы установки обработчика не существуют, а оставшиеся 3% пользователей текстовых браузеров мы гоним в тундру.
- 28 декабря 200717:18 но было бы удобно исползовать что-то типа if(listen...
- 28 декабря 200717:20 Зачем? Обработчик назначается всегда без проблем. Для всех браузеров. Никаких проблем никогда не возникает.
- 30 декабря 200713:52 тогда else return false действительно имеет только методическое значение. Можно убрать, наверно
- 30 декабря 200715:36 Хорошо.
- 28 декабря 200717:16 Подсветка в комментариях не работает, BB-кодов нет ;)
Я тоже знаю!
Вы можете тоже написать собственный комментарий. Если хотите к кому-то обратиться, используйте символ @, после которого не забудьте написать имя того, к кому обращаетесь. Не забывайте про существование XHTML-элементов, с помощью которых вы можете оформить ваш комментарий как вам угодно. И, да: ведите себя достойно, вы же не роботы, правда? Если вам интересно, можете подписаться на комментарии по RSS.