Проблемы с Firefox 4 новым поведением события щелчка - PullRequest
2 голосов
/ 03 июня 2011

У меня проблема с поведением Firefox 4 в отношении параметров, передаваемых в функцию, вызываемую при событии щелчка.

Посмотрите на этот пример:

<html>
<head>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/mootools/1.11/mootools.js"></script>
</head>
<body>
    <span id="e">Klick mich!</span> 
    <script type="text/javascript">
        $("e").addEvent("click", function(a, b, c){
            alert(this);
            alert(a);
            alert(b);
            alert(c);
            console.log(this);
            console.log(a);
            console.log(b);
            console.log(c);
        }.bind(1, [2, 3]));
    </script>   
</body>
</html>

Если вы откроете это в Firefox 4, результат будет следующим:

  1. 1
  2. 2,3
  3. объект MouseEvent
  4. undefined

В любом другом браузере результат будет таким:

  1. 1
  2. 2
  3. 3
  4. undefined

Как видите, только Firefox 4 передает MouseEvent в функцию.Такое поведение сильно нарушает мой код.

Знаете ли вы какое-нибудь решение?Спасибо за помощь.

EDIT1 : Chrome ведет себя как FF4

1 Ответ

1 голос
/ 03 июня 2011

проблема в том, что это mootools 1.11 - НЕ ПОДДЕРЖИВАЕТСЯ И СТАРЫЙ

в mootools 1.11, было принято использовать (http://docs111.mootools.net/Native/Function.js#Function.bind):

bind необязательный, объект, на который будет ссылаться «this» функции.

аргументы необязательны, аргументы переданы. должен быть массивом, если аргументы> 1

следовательно, делая .bind (1, [args]) was правильно. Однако недавно собственная реализация Function.bind изменилась в браузерах, которые ее реализуют - https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind

thisArg Значение, которое передается в качестве параметра this целевой функции при вызове связанной функции. Значение игнорируется, если связанная функция построена с использованием оператора new.

arg1, arg2, ... Аргументы для добавления к аргументам, предоставленным связанной функции при вызове целевой функции.

это означает, что для его работы вам нужно .bind(1,2,3,4);, где 1 - связанная область, а 2,3,4 - аргументы.

you СЛЕДУЕТ обновить, запуск mootools 1.11 в браузерах, выпущенных через 4 года после написания, даст непредсказуемые результаты. всегда. например, 1.11 больше не будет обнаруживать gecko / ff из-за устаревшей функции, используемой для его проверки.

что дальше, проверьте на netscape4? :)

...