是否可以在jquery中的委托函数中添加多个选择器?

cor*_*ded 4 jquery delegates

像我的应用程序中的模块的脚本创建命名空间/子模块的东西?就像说我只想将某些任务委托给某个div中的元素,比如说#submodule1.

我可以这样做:

 $("#submodule1")
    .delegate(".selector1", "click", function() {} )
    .delegate(".selector2", "click", function() {} )
Run Code Online (Sandbox Code Playgroud)

如果有可能,它会是否相同:

 $("#submodule1").delegate(".selector1", "click", function() {} )
 $("#submodule1").delegate(".selector2", "click", function() {} )
Run Code Online (Sandbox Code Playgroud)

编辑

根据TJ Crowder的回答我应该能够做到这一点:

$("#soap-test-test-cases")
  .delegate(".soap-test-case", "click", function(){
      testfunction();
  });
  .delegate("legend", "click", function() {
    alert("this is a test!");
  });
Run Code Online (Sandbox Code Playgroud)

但我得到一个语法错误

T.J*_*der 15

编辑:

您的编辑更改了问题,现在您有语法错误:

$("#soap-test-test-cases")
   .delegate(".soap-test-case", "click", function(){
       testfunction();
   });
// v--- here
   .delegate("legend", "click", function() {
     alert("this is a test!");
   });
Run Code Online (Sandbox Code Playgroud)

如果你删除前面的分号,你没问题:

$("#soap-test-test-cases")
   .delegate(".soap-test-case", "click", function(){
       testfunction();
   })  // <== No semi here, we're not done with the statement yet
   .delegate("legend", "click", function() {
     alert("this is a test!");
   }); // <== Now we're done with the statement
Run Code Online (Sandbox Code Playgroud)

这是一个跨越多行的声明,这很好.您正在调用$(),然后调用返回delegate的对象$(),然后调用delegate您第一次调用的对象delegate返回.

在第一次delegate调用后使用分号,您有两个语句,第二个以a开头.(这是语法错误).

JavaScript主要不关心换行符,它关心语句,这些语句以分号结束.它具有自动分号插入的恐怖,但它不会插入使您的代码无效的分号.(它插入使你的代码行为异常的分号,所以,再次,知道你的语句开始和结束的位置,并确保你提供正确的分号.)


原始答案:

您给出的代码示例都是有效的,它们具有相同的效果:连接两个单独的函数来处理点击,其中一个在元素的一个子集(.selector1)上,另一个在另一个(.selector2)上.你的第一个例子就是标准链接.

我不认为这是你所要求的,但以防万一:如果你想对两类元素使用相同的函数,你也可以这样做:

$("#submodule1").delegate(".selector1, .selector2", "click", function() { });
Run Code Online (Sandbox Code Playgroud)

...或(当然)使用相同的命名函数和两个单独的delegate调用.