9

我已经根据我正在处理的最新项目中的类名定义了事件处理程序。

例如。所有具有类名“foo”的元素都应以特定方式响应更改事件。并且所有类名为“bar”的元素都应该以其他方式响应。

现在我的一些元素属于两个类,即 class="foo bar" 并且它们应该以两种方式响应。现在,只有一个事件处理函数被调用。

如何使两个响应同时执行。

4

2 回答 2

14

这取决于您如何绑定事件。如果您通过 jQuery 绑定它们而不是通过覆盖处理程序x.onchange = function() { ... }- 所有绑定的事件处理程序都将被执行。这是因为 jQuery将事件处理程序排队,而不是覆盖以前的绑定。

检查此项fiddle以查看多个事件被触发

检查此项fiddle以查看事件处理程序是如何被覆盖的,从而仅导致最后一个绑定的处理程序触发

于 2012-10-02T05:14:01.597 回答
5

您想要的是“行为”模式的变体。

它使您可以自动处理具有给定类或其他属性的元素上的事件。

通常的实现是监听“文档”上的事件,然后通过 event.target 定义动作。

例如:小提琴(http://jsfiddle.net/PRkAr/

$(document).on('click change', '.foo.bar', function(e) {
  var classes = this.className.split(/\s+/);
  $.each(classes, function(i, cls) {
    handle(e, this, cls);
  })
})

function handle(e, elem, cls) { 
  // example: Event type click on elem DIV with class foo
  alert("Event type " + e.type + " on elem " + elem.tagName + " with class " + cls);
} 

此处函数处理具有您选择的类的元素上的所有事件。如果您想添加其他事件或类,只需将它们附加到“on”列表中。

于 2012-10-02T06:22:57.210 回答