Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 21.05.2013, 08:59
Интересующийся
Отправить личное сообщение для seyfer Посмотреть профиль Найти все сообщения от seyfer
 
Регистрация: 16.11.2012
Сообщений: 16

Сообщение от Sanda Посмотреть сообщение
Вообще можно было попробовать без своего EventUtils
Конечно же я пробовал.

Ни кто мне не сказал ничего нового. Печально.
Ответить с цитированием
  #12 (permalink)  
Старый 21.05.2013, 09:57
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

this.removeEventListener
__________________
29375, 35
Ответить с цитированием
  #13 (permalink)  
Старый 21.05.2013, 10:34
Аватар для simple
Профессор
Отправить личное сообщение для simple Посмотреть профиль Найти все сообщения от simple
 
Регистрация: 23.09.2010
Сообщений: 247

elem.addEventListener(event, handler.bind(elem), false);
....
function handler() {
    this.removeEventListener(event, arguments.callee);
};
__________________
На начальном этапе события могут казаться случайными, но постепенно проявляется связь, и в конце концов все части целого складываются
Ответить с цитированием
  #14 (permalink)  
Старый 21.05.2013, 10:52
Интересующийся
Отправить личное сообщение для seyfer Посмотреть профиль Найти все сообщения от seyfer
 
Регистрация: 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);


Благодарю за наводку, уже лучше, чем предыдущие ответы.
Ответить с цитированием
  #15 (permalink)  
Старый 21.05.2013, 13:09
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 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>
Ответить с цитированием
  #16 (permalink)  
Старый 22.05.2013, 07:29
Интересующийся
Отправить личное сообщение для seyfer Посмотреть профиль Найти все сообщения от seyfer
 
Регистрация: 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>
У вас в данном случаем одна область видимости.
Ну и даже если написать иначе, но в такой последовательности - сработают замыкания.

У меня задача была сделать чтобы работало так же в РАЗНЫХ областях видимости. Как вы не можете этого понять то...........
Ответить с цитированием
  #17 (permalink)  
Старый 22.05.2013, 07:35
Интересующийся
Отправить личное сообщение для seyfer Посмотреть профиль Найти все сообщения от seyfer
 
Регистрация: 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 мне тут минусов понаставили, однако вы просто не поняли задачу. Не идиотизм разве.
Ответить с цитированием
  #18 (permalink)  
Старый 22.05.2013, 10:37
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 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 мне тут минусов понаставили
Не перекладывай свои недостатки на других. Тебе наставили минусов потому что ты тормоз, еще и возмущаешься.
Ответить с цитированием
  #19 (permalink)  
Старый 22.05.2013, 11:50
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

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.
Ответить с цитированием
  #20 (permalink)  
Старый 22.05.2013, 12:00
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Aetae
Ну ты упоролся: у него событие вешается не на глобальный document, а на видимый локально block_edit, которого нет в области видимости addSeats.
Ну и причем тут вообще события? Области видимости - основа языка. Вопрос был про разовое выполнение. А проблема с видимостью переменной - это уже другая тема.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выполнение проверки после наступления события juggalo Events/DOM/Window 6 06.10.2012 01:37
Выполнение действия 1 раз в сутки на Cookie fAmOus Элементы интерфейса 3 29.07.2012 23:10
Выполнение события с последующей задержкой spider84 Events/DOM/Window 4 09.08.2011 09:41
Выполнение скрипта раз в сутки по cookie Avel Mink Элементы интерфейса 16 29.04.2011 09:38