Можно ли добавить несколько селекторов в функцию делегата в JQuery? - PullRequest
4 голосов
/ 15 апреля 2011

Что-то вроде создания пространства имен / подмодуля для моих скриптов, касающихся модуля в моем приложении?Например, сказать, что я хочу делегировать определенные задачи только элементам внутри определенного элемента, например, сказать # submodule1.

Могу ли я сделать что-то вроде этого:

 $("#submodule1")
    .delegate(".selector1", "click", function() {} )
    .delegate(".selector2", "click", function() {} )

И если это возможно, будет ли этобыть таким же как:

 $("#submodule1").delegate(".selector1", "click", function() {} )
 $("#submodule1").delegate(".selector2", "click", function() {} )

РЕДАКТИРОВАТЬ

на основе ответа TJ Crowder я должен быть в состоянии сделать это:

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

ноя получаю синтаксическую ошибку

1 Ответ

15 голосов
/ 15 апреля 2011

Изменить :

Ваше изменение изменит вопрос, теперь у вас есть синтаксическая ошибка:

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

Если вы удалите точку с запятой перед ней, вывсе в порядке:

$("#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

Это один оператор , разбросанный по нескольким строкам, что нормально.Вы вызываете $(), затем вызываете delegate для объекта, который возвращает $(), затем вызываете delegate для объекта, который возвращает ваш первый вызов delegate.

С точкой с запятой послепри первом вызове delegate у вас есть два оператора , а второй начинается с . (что является синтаксической ошибкой).

JavaScript в основном не заботится о строкеперерывы, он заботится о операторах , которые заканчиваются точкой с запятой.У него ужас: автоматическая вставка точек с запятой , но он не будет вставлять точки с запятой, которые делают ваш код недействительным.(Он будет вставлять точки с запятой, которые делают ваш код некорректно , хотя, опять же, узнайте, где начинаются и заканчиваются ваши операторы, и убедитесь, что вы вводите правильные точки с запятой.)


Оригинальный ответ :

Приведенные вами примеры кода действительны и имеют одинаковый эффект: подключение двух отдельных функций для обработки кликов, одна изих на одном подмножестве элементов (.selector1) и другом на другом (.selector2).Ваш первый пример - просто стандартная цепочка.

Я не думаю , это то, что вы просите, но на всякий случай: если вы хотите использовать то же самое функция для обоих классов элементов, вы также можете сделать это:

$("#submodule1").delegate(".selector1, .selector2", "click", function() { });

... или (конечно) использовать одну и ту же именованную функцию с двумя отдельными delegate вызовами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...