1

バリーを殺害する別の質問。

jQueryを使用して空の配列にイベントをアタッチできます.on()か?

var barry = new Person();
var steve = new Person();
var paul = new Person();

var people = [];


function Person() {

}

Person.prototype.murder = function() {
    $(this).triggerHandler("murder");
}


/*
    If I apply .on to an empty array the event is never triggered why?
            $(people).on("murder", function(){
       console.log("call the police");
    })

 */

people.push(barry)
people.push(steve)
people.push(paul)

$(people).on("murder", function() {
    console.log("call the police");
})

barry.murder();​

これはあなたができないことを示唆するフィドルです。しかし、なぜですか?配列がデリゲートオブジェクトであると思いますか?

4

2 に答える 2

3

イベントを配列にバインドしていません。$配列で関数を呼び出すこと[a,b,c]は、 と同じ$(a).add(b).add(c)です。And$([])は just $()(空の jQuery オブジェクト) と同じです。

于 2012-10-25T15:41:07.050 に答える
2

可能ですが、jQueryはトリガーメソッドを魔法のように合成しません。

people.trigger("murder");

また、配列内にある値に対してイベントをトリガーすることもできません。配列要素からそれを含む配列にバブリングするイベントはありません。イベントバブリングは、JavaScriptデータ構造ではなく、DOMで機能します。

編集—申し訳ありませんが、独自の.murder()APIを作成したようです。それなら問題ありませんが、イベントのバブリングに関する問題がまだあります。

オブジェクトと、オブジェクトへの参照を含む配列との間に確固たる関係はありません。APIを拡張して、「Person」オブジェクトがイベントの送信先を認識できるようにすることができます。

もう一度編集します—まあ今は馬鹿げています—これは実際にはオブジェクトとしての配列とは何の関係もありません。配列インスタンスの周りにjQueryオブジェクトをラップすると、ライブラリによって、配列の要素をjQueryオブジェクトのメンバーとして扱う要求として解釈されます。したがって、イベントハンドラーを追加する場合、配列は実際にはそれとは何の関係もありません。つまり、ハンドラーを個々の要素に追加することになります。

于 2012-10-25T15:34:55.693 に答える