如何将jQuery事件处理程序应用于多个缓存选择器?

时间:2013-02-19 22:51:15

标签: javascript arrays jquery-selectors jquery

假设我有三个按钮

<button data-action="grow" class="resizeButton">Grow</button>
<button data-action="shrink" class="resizeButton">Shrink</button>
<button id="normalButton">Normal Button</button>

我有变量按钮

var $normalButton = $('#normalButton');
var $growButton = $('.resizeButton[data-action="grow"]');
var $shrinkButton = $('.resizeButton[data-action="shrink"]');

现在假设我想将mouseentermouseleaveclick事件处理程序连接到普通按钮

$normalButton.on({
   mouseenter: function(){
       //do some stuff
   },

   mouseleave: function(){
       //reverse some stuff
   },

   click: function(){
       //do some more stuff
   }
});

神奇的jQuery向导让这对我们有用。

现在假设我们要将mouseentermouseleaveclick事件处理程序附加到增长按钮和缩小按钮。这些按钮的处理程序相同,但正常按钮的处理程序不同。

有几种方法我可以看到这样做,但它们基本上是相同的想法,只需分配两次,一次到第一个按钮,一次到下一个按钮。

所以,

var handlers = {
    mouseenter: function(){
        //do some different stuff
    },

    mouseleave: function(){
        //reverse some different stuff
    },

    click: function(){
        //do some more different stuff
    }
};

$growButton.on(handlers);
$shrinkButton.on(handlers);

$.each([$growButton, $shrinkButton], function(i, el){
    el.on({
        mouseenter: function(){
            //do some different stuff
        },

        mouseleave: function(){
            //reverse some different stuff
        },

        click: function(){
            //do some more different stuff
        }
    });
});

但我想知道的是,是否存在从中创建jQuery对象的语法,或者只是将处理程序应用于一组缓存的选择器,如$([$growButton, $shrinkButton]).on(...或类似的?

1 个答案:

答案 0 :(得分:8)

您可以使用add方法:

$growButton.add($shrinkButton).on(...)