7

jquery "on" を使用して複数のイベントに名前を付ける正しい方法は何だろうか...

例えば:

$(".parent-selector").on({
"mouseenter.namespace": function() {
    // mouseenter event
},
"mouseleave.namespace": function() {
    // mouseleave event
}
}, ".selector");

これは機能していません...「.namespace」を削除すると機能します。

作業中の名前空間を使用した jquery の例:

$(".parent-selector").on("mouseenter.namespace", ".selector", function() { });

mouseenter/mouseleave イベントの両方を別々に実行できることは理解しています...オブジェクトを介して名前空間を渡す方法があるかどうかだけ知りたいです

ありがとう!

4

3 に答える 3

5

複数のイベントにアタッチするには、スペースで区切られたイベントのリストを渡す必要があります。

$(".parent-selector").on("mouseenter.namespace mouseleave.namespace",
                         ".selector", function() { });

編集:

コールバック内でいつでもイベントのタイプを取得し、内部で他の関数を呼び出すことができます。

$(".parent-selector").on("mouseenter.namespace mouseleave.namespace", ".selector", function(e) {
    if (e.type == "mouseenter.namespace") {
        myMouseEnter(e);
    } else if (e.type == "mouseleave.namespace") {
        myMouseLeave(e);
    }
});

動作しているように見えますが、自分のマシンにいないため確認できません。試してみる。

于 2013-01-18T22:29:40.430 に答える
3

以下のコードは実際には正しいです-コードの前半で名前空間の競合に問題がありました。

$(".parent-selector").on({
    "mouseenter.namespace": function() {
        // mouseenter event
    },
    "mouseleave.namespace": function() {
        // mouseleave event
    }
}, ".selector");
于 2013-01-18T22:39:41.547 に答える
0

コメントで言ったことから、名前空間ごとに異なる関数を起動したいと考えています。それらを組み合わせて何か違うことをしたいと思うのは奇妙に思えます。ただし、何がイベントをトリガーしたかを知りたい場合は、 を使用できますevent.type

$("#foo").on("mouseover mouseout", ".bar",
    function(evt){
       console.log(evt.type); 
    }
);

JSFiddle

于 2013-01-18T22:35:46.910 に答える