2

クリック イベントで呼び出される関数に渡されるパラメータに関して、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. 未定義

他のブラウザーでは、結果は次のようになります。

  1. 1
  2. 2
  3. 3
  4. 未定義

ご覧のとおり、MouseEvent を関数に渡すのは Firefox 4 だけです。この動作により、多くのコードが壊れます。

解決策をご存知ですか?手伝ってくれてありがとう。

EDIT1 : Chrome は FF4 のように動作します

4

1 に答える 1

1

問題は-これはmootools 1.11です-サポートされておらず、古いです

mootools 1.11 では、使用が認められました ( http://docs111.mootools.net/Native/Function.js#Function.bind ):

bind オプション。関数の「this」が参照するオブジェクト。

args オプション、渡された引数。引数 > 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 が引数である必要があります。

mootools 1.11 が書かれてから 4 年経ったブラウザで mootools 1.11 を実行すると、予期しない結果が生じる可能性がありますいつも。たとえば、1.11 では、gecko/ff のテストに使用される非推奨の関数が原因で、gecko/ff を検出しなくなりました。

次に、netscape4 をチェックしますか? :)

于 2011-06-03T12:17:40.573 に答える