jQuery:使用相同事件函数的两个元素

wil*_*age 0 javascript jquery events javascript-events

在两个不同的事件处理程序之间共享一个函数的最佳方法是什么?我想要相同的结果,但是根据点击的元素,需要在函数中定义一些情境因变量.

我可以破解解决方案,但想知道这种情况的最佳实践.简单的问题必须有一个简单的答案......

var onMyEvent = function(e){
    if(click triggered from 'a'){
        //do that 
    }  
    if(click triggered from 'div'){
        //do that
    } 
}


$('a').click(onMyEvent);
$('div').click(onMyEvent);
Run Code Online (Sandbox Code Playgroud)

FIDDLE: http ://jsfiddle.net/f6C92/

Dav*_*und 5

我想有几种方法可以实现这一点,例如检查e目标对象的变量等,但对于您的场景,最简单和最易读的将是使用该is()函数,您可以传递任何CSS选择器来测试是否感兴趣的对象与之匹配.

var onMyEvent = function(e){
    if($(this).is('a')){
        //do that 
    }  
    if($(this).is('div')){
        //do that
    } 
}


$('a').click(onMyEvent);
$('div').click(onMyEvent);
Run Code Online (Sandbox Code Playgroud)

有些人会争辩说上面对jQuery进行了不必要的往返,当你通过测试可以实现同样的目的时this.tagName == 'A',但是出于浏览器兼容性的原因,我通常也建议将这些内容委托给jQuery.

另一种巧妙的方法是将相关信息作为事件数据传递:

var onMyEvent = function(e){
    if(e.data.type == 'a'){
        //do that 
    }  
    ...
}


$('a').click({ type: 'a' }, onMyEvent);
$('div').click({ type: 'div' }, onMyEvent);
Run Code Online (Sandbox Code Playgroud)