1

これが私が持っているものです

$('.test').on({
    'click', 'a', function(event) {
        event.stopPropagation();

        if( $(this).hasClass('selector') ) {
        }
        if( $(this).hasClass('prev') ) {
        }
        if( $(this).hasClass('next') ) {
        }
        return false;
    },
    mouseenter: function(){
    },
    mouseleave: function(){
    }
});

これが間違った構文であることはわかっていますが、正しい構文は何ですか? クリックイベントとマウスイベントを分離すれば、それを書くことができることはわかっています。しかし、それらを組み合わせる方法はありますか、それとも分離する必要がありますか? 御時間ありがとうございます

4

4 に答える 4

4

呼び出しを連鎖させることができます。

$('.test').on('click', 'a', function() { ... })
 .on('mouseenter', 'a', function() { ... })
 .on('mouseleave', 'a', function() { ... });

必要に応じて、イベントタイプをチェックするハンドラーを1つ持つことができると思いますが、これはそれほど奇妙ではないようです。

于 2012-08-23T16:27:12.497 に答える
3

両方で同じセレクターを使用したくない場合は、2 つの別々の呼び出しを行う必要があります。

$('.test').on({
    mouseenter: function() {},
    mouseleave: function() {} //null selector/no selector here so these events only fire on `.test` itself
}).on("click", "a", function(event) { //Selector here so this event only fires for `a` descendants of `.test`
    event.stopPropagation();
    if ($(this).hasClass('selector')) {}
    if ($(this).hasClass('prev')) {}
    if ($(this).hasClass('next')) {}
    return false;
});

また、イベント パラメータを指定するのを忘れていたため、IE と Firefox でバグが発生していました。

于 2012-08-23T16:30:54.843 に答える
2

.on()マップも受け入れます:

$('.test').on({
    click: function() {
    },
    mouseenter: function() {
    },
    mouseleave: function() {
    }
}, 'a');
于 2012-08-23T16:30:48.383 に答える
0

ラッパー要素のホバー イベントのみが必要な場合は、別の要素であるため、そのイベントを個別にバインドする必要があります。

$('.test').on({
    click: function(event) {
        event.stopPropagation();
        if ($(this).hasClass('selector')) {}
        if ($(this).hasClass('prev')) {}
        if ($(this).hasClass('next')) {}
        return false;
    }
}, "a");

$('.test').hover( function(event){
        // This in the mouse enter handler  
    },
    function(event){
        // This is the mouse leave handler
    }
);
于 2012-08-23T16:41:06.993 に答える