добавление .функции live to click в jquery

#javascript #jquery

#javascript #jquery

Вопрос:

У нас есть приложение, которое использует много элементов jquery, и мы добавляем все наши скрипты в init.js файл, в котором много .live("click"), .live("hover") etc, плюс еще кое-что if($(".classname").length) и т.д.

У меня есть подозрение, что это МОЖЕТ излишне замедлять работу наших страниц (некоторым страницам не нужны некоторые скрипты). Но какое более элегантное решение для этого? Нам, конечно, не понравится отдельный файл для каждой страницы, которая в нем нуждается, это сложная задача в обслуживании. Есть ли какой-либо другой способ добиться этого?

Комментарии:

1. я не думаю, что jscompress справится с этим лучше, поскольку причина, по которой он, вероятно, замедляется, заключается в обработке всех этих вызовов в реальном времени

Ответ №1:

Оберните функции, относящиеся к вашей странице, в функции и вызывайте соответствующую функцию на каждой странице.

Другим решением было бы сопоставление URL-адресов функциям и автоматический вызов функций, применимых к текущему URL-адресу, — тогда вам не понадобился бы никакой JS на самих страницах.

Для ваших живых событий вы могли бы использовать делегаты в теле и присвоить телу класс, специфичный для страницы: $('body.page-xyz').delegate('your-live-selector', 'click', function(){...})

Это присоединяет обработчик события, только если тело имеет правильный класс.

Комментарии:

1. 1 В значительной степени то, что я печатал. 🙂 Второй вариант, на мой вкус, слишком тесно связан, поэтому я предпочитаю встроенный script блок на каждой странице, который запускает соответствующую настройку, но я также собирался включить его в качестве опции на случай, если операционная система отнесется к этому иначе.

2. ммм, я подробнее рассмотрю эту проблему с делегированием. значит, делегат сначала просто ищет класс body? функционирует ли он так же, как live, в котором он также присоединяется к динамически создаваемым элементам?

Ответ №2:

Вы могли бы использовать getScript для загрузки других js-файлов из основного.

Комментарии:

1. Вы могли бы, если хотите увеличить нагрузку на HTTP-запросы. Наилучшей практикой является минимизация HTTP-запросов.