21.05.2013, 08:59
|
Интересующийся
|
|
Регистрация: 16.11.2012
Сообщений: 16
|
|
Сообщение от Sanda
|
Вообще можно было попробовать без своего EventUtils
|
Конечно же я пробовал.
Ни кто мне не сказал ничего нового. Печально.
|
|
21.05.2013, 09:57
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,586
|
|
__________________
29375, 35
|
|
21.05.2013, 10:34
|
|
Профессор
|
|
Регистрация: 23.09.2010
Сообщений: 247
|
|
elem.addEventListener(event, handler.bind(elem), false);
....
function handler() {
this.removeEventListener(event, arguments.callee);
};
__________________
На начальном этапе события могут казаться случайными, но постепенно проявляется связь, и в конце концов все части целого складываются
|
|
21.05.2013, 10:52
|
Интересующийся
|
|
Регистрация: 16.11.2012
Сообщений: 16
|
|
А если использовать мой хелпер, получается:
eventUtility.addEvent(block_edit, "click", actions.addSeats);
//в другой области видимости
function addSeats()
{
eventUtility.removeEvent(this, "click", actions.addSeats);
}
Так не работало, видимо actions.addSeats считается уже другим экземпляром.
arguments.callee - ссылается на сам себя, т.е. this ? Так не пробовал, может быть получится так.
eventUtility.removeEvent(this, "click", arguments.callee);
Благодарю за наводку, уже лучше, чем предыдущие ответы.
|
|
21.05.2013, 13:09
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
<body>
<script>
document.addEventListener('mousemove', onMouseMove)
function onMouseMove(){
document.body.innerHTML += 'mousemove<br>';
//document.removeEventListener('mousemove', onMouseMove);
}
</script>
</body>
<body>
<script>
document.addEventListener('mousemove', onMouseMove)
function onMouseMove(){
document.body.innerHTML += 'mousemove<br>';
document.removeEventListener('mousemove', onMouseMove);
}
</script>
</body>
|
|
22.05.2013, 07:29
|
Интересующийся
|
|
Регистрация: 16.11.2012
Сообщений: 16
|
|
Сообщение от danik.js
|
<body>
<script>
document.addEventListener('mousemove', onMouseMove)
function onMouseMove(){
document.body.innerHTML += 'mousemove<br>';
//document.removeEventListener('mousemove', onMouseMove);
}
</script>
</body>
<body>
<script>
document.addEventListener('mousemove', onMouseMove)
function onMouseMove(){
document.body.innerHTML += 'mousemove<br>';
document.removeEventListener('mousemove', onMouseMove);
}
</script>
</body>
|
У вас в данном случаем одна область видимости.
Ну и даже если написать иначе, но в такой последовательности - сработают замыкания.
У меня задача была сделать чтобы работало так же в РАЗНЫХ областях видимости. Как вы не можете этого понять то...........
|
|
22.05.2013, 07:35
|
Интересующийся
|
|
Регистрация: 16.11.2012
Сообщений: 16
|
|
Попробуйте обернуть
document.addEventListener('mousemove', onMouseMove)
в другую ф-ю. и представить, что onMouseMove принадлежит глобальному объекту.
var seat = {
onMouseMove : function() {};
}
Тогда первой идеей будет в каждой ф-ии вызывать
function1 () {
document.addEventListener('mousemove', seat.onMouseMove);
}
function2 () {
document.removeEventListener('mousemove', seat.onMouseMove);
}
Попробуйте))) а у меня это не функции к тому же, а методы, т.е. в объектах. Моя задача более сложная, чем ваши простенькие примеры danik.js. Узко мыслите.
Из-за вашего ограниченного мышления danik.js мне тут минусов понаставили, однако вы просто не поняли задачу. Не идиотизм разве.
|
|
22.05.2013, 10:37
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Сообщение от seyfer
|
у меня это не функции к тому же, а методы
|
В javascript нету методов, также как и классов. О чем ты вобще
<body>
<script>
var seat = {
onMouseMove: function() {
document.body.innerHTML += 'mousemove<br>';
document.removeEventListener('mousemove', seat.onMouseMove);
}
}
document.addEventListener('mousemove', seat.onMouseMove)
</script>
</body>
И че изменилось? ссылка на обработчик так и осталась ссылкой на обработчик.
Сообщение от seyfer
|
Из-за вашего ограниченного мышления danik.js мне тут минусов понаставили
|
Не перекладывай свои недостатки на других. Тебе наставили минусов потому что ты тормоз, еще и возмущаешься.
|
|
22.05.2013, 11:50
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,586
|
|
danik.js,
Ну ты упоролся: у него событие вешается не на глобальный document, а на видимый локально block_edit, которого нет в области видимости addSeats.
Он конечно тоже упоролся - писать свой обработчик событий не разобравшись с нативным, но с него спросу мало.
Сообщение от seyfer
|
Так не работало, видимо actions.addSeats считается уже другим экземпляром.
|
Нет. Скорее всего, из-за кривой самопальной работы с событиями, this указывает куда-то не туда.
Сообщение от simple
|
elem.addEventListener(event, handler.bind(elem), false);
....
function handler() {
this.removeEventListener(event, arguments.callee);
};
|
bind не нужен, событие всегда обрабатывается в контексте вызова.
__________________
29375, 35
Последний раз редактировалось Aetae, 22.05.2013 в 11:59.
|
|
22.05.2013, 12:00
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Сообщение от Aetae
|
Ну ты упоролся: у него событие вешается не на глобальный document, а на видимый локально block_edit, которого нет в области видимости addSeats.
|
Ну и причем тут вообще события? Области видимости - основа языка. Вопрос был про разовое выполнение. А проблема с видимостью переменной - это уже другая тема.
|
|
|
|