带有 jQuery .on() 的多重选择器

Multiple Selectors with jQuery .on()

我已经查看了 .on() | jQuery API Documentation 以寻求有关我的特定用例的帮助,但我找不到有关如何做或是否可以完成的信息。

我想为两个不同的 "selectors" 将一个函数附加到事件(比如点击),如下所示:

我已经根据 jQuery 通常如何处理多个事物的方式尝试了以下所有组合,但有些组合不起作用,而其他组合只会处理第一个选择器而完全忽略第二个:

// correct
$(document).on("click", 'div[id^="action_"], div[id^="user_"]' , function(){

// incorrect
$(document).on("click", 'div[id^="action_"] div[id^="user_"]' , function(){
$(document).on("click", 'div[id^="action_"]' || 'div[id^="user_"]' , function(){
$(document).on("click", 'div[id^="action_"]', 'div[id^="user_"]' , function(){

第一个是我确信会起作用的方法,当它不起作用时,促使我尝试其他所有方法,这显然是在黑暗中尝试的尝试。在现在标记为不正确的那些中,第一个根本不做任何事情,第二个和第三个都导致第一个被处理而不是第二个。我很确定最后一个不起作用,我没想到它会起作用,因为它包含语法的 [,data] 部分,但为了完整起见,试了一下。

在我继续将它们分成两段丑陋和混乱的代码之前,我们将不胜感激。 TIA.

分辨率

多亏了 Frank 的回答和善意的摆弄,证实了我在第一种尝试方法中显示的最初直觉是正确的(我已经对其进行了更新以更清楚地表明什么是正确的,什么是错误的)。我仍然不确定为什么它没有按预期工作,这导致我 post 这个问题,但我怀疑这个问题可能来自 GM and/or 可能来自页面本身的某些东西的干扰,而不是代码。如果我找到观察的确切来源,为了完整起见,我将对其进行编辑以反映它。

你提到的第一种方式---即$(document).on("click", 'div[id^="action_"], div[id^="user_"]', ...)---肯定是正确的,并且基于this fiddle

另外,您可以命名您的函数并将函数名称简单地传递给 on(),这样您就可以重新使用已命名的函数:

function myCallBack(event) {
   alert($(event.target).html());
}

$(document).ready(function() {
   $(document).on("click", 'div[id^="action_"], div[id^="user_"]', myCallBack);
})

看到这种方法有效 here

另外,请注意 event performance with on(),尤其是在 (1) 将委托事件附加到 document 以及 (2) 使用更复杂的选择器时。关于#1 需要注意的一件事是

attaching the handler to a more appropriate point in the document