2012-08-23 31 views
1

这里是我如何以正确的方式在()上写这个jquery?

$('.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(){ 
    } 
}); 

我知道这是错误的语法,那么什么是正确的语法?我知道如果我将点击和鼠标事件分开,我可以编写它。但是有没有办法将它们结合起来,还是需要将它们分开?感谢您的时间

+0

您可以在文档中找到说明和示例:http://api.jquery.com/on/。你可能想'.on(events-map [,selector] [,data])'。 –

+0

我没有看到我想要的例子,所以这就是为什么我写了我想要的组合的原因 – Huangism

回答

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中的错误

+0

是事件参数,谢谢 最后的选择器是否适用于所有3个事件,或者只需点击?我只需要点击一个 – Huangism

+0

+ 1使用OP代码给出解决方案,我希望我能给你更多...我在这里测试它http://jsfiddle.net/rajaadil/BPZdS/ – Adil

+0

@黄色好吧我有现在改变了 – Esailija

4

您可以连锁调用:

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

我想,如果你想你可以有一个检查事件类型有一个处理程序,但这似乎不太奇怪。

+0

谢谢我给它的另一个答案,他的后续努力,但链接它是正确的方式去 – Huangism

2

.on()也接受地图

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

我需要一个从测试div – Huangism

+0

@黄色:这基本上就是这个声明所说的。处理程序从'.test'中的每个* anchor *中的每个'click','mouseenter'和'mouseleave'事件。 – jAndy

+0

好的,我需要悬停在测试上,然后点击一个只有 – Huangism

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 
    } 
);