mootools и IE: addEvents не работает? - PullRequest
0 голосов
/ 05 января 2012

мои мероприятия отлично работают во всем, кроме! @ # $ IE. я обнаружил, что мне нужно вызвать функцию fireEvent('event');, но я не знаю, где ее поставить. вытащить из предыдущего вопроса, который я задал, это где я его положил?

$('field').addEvents ({
  'focus' : function() {
    this.fireEvent('focus');
    // do some stuff 
  }
  'blur' : function() {
    this.fireEvent('blur');
    // do other stuff 
  }}
});

потому что, если это ... что-то еще не так, потому что я попробовал это, и это не работает, черт возьми.

можем ли мы просто сказать людям: "доступ запрещен. Вы используете запаздывающий браузер. Возьмите реальный и вернитесь." почему Anonymous не могут ориентироваться на команду разработчиков IE? : P

в любом случае. ТИА.

WR!

1 Ответ

2 голосов
/ 05 января 2012

то, что у вас есть, является избыточным и фактически вызывает бесконечный цикл. по сути, это функция, вызывающая себя. современные JIT-компиляторы могут пойти «да, вы, вероятно, не хотели этого делать» и прервать цикл, но IE7 / 8, скорее всего, просто запустит его как написано

в основном, существует разница между обратным вызовом, добавленным addEvent, который срабатывает при собственном срабатывании события, и ручным отключением обратного вызова (fireEvent).

позже - если вы сделали $("field").fireEvent("focus") - он просто запустит код в связанной функции. это не будет на самом деле сосредоточиться на поле. Родной $("field").focus(); будет делать ОБА.

предостережение при использовании fireEvent - это когда ваш обратный вызов пытается что-то сделать с самим событием. например, в этом коде:

el.addEvent("click", function(e) {
    e.stop();

    // do something
});

// later...

el.fireEvent("click"); // exception as e is not defined and stop is not a function

Чтобы обойти это, вам нужно проверить, определен ли аргумент e и определен ли stop в обратном вызове:

el.addEvent("click", function(e) {
    e && e.stop && e.stop();

    // do something
});

или вы можете передать фиктивный объект в fireEvent:

el.fireEvent("click", { 
    stop: Function.from
});

или даже ...

el.fireEvent("click", new DOMEvent()); // 1.4+, new Event() before.... 

Не уверен, что это поможет, поскольку у вас было много лишних в вашем «вопросе», но это может дать вам представление о том, как используются события.

веселись

...