Вообще обнаруживать изменения положения HTML с помощью jquery?
Я использую отличный плагин BeautyTips как средство индикации сбоев валидации для конечных пользователей, и я сталкиваюсь с проблемами позиционирования, когда содержимое страницы динамически добавляется, удаляется или анимируется.
Вот конкретный пример. У меня есть DIV в верхней части каждой страницы, которая используется для подтверждения / сообщения об ошибках. Он отображается в $(document.ready) с помощью slideToggle(). Это естественным образом "отталкивает" весь последующий html-контент, отбрасывая позиционирование / выравнивание подсказок. Если я вызываю встроенный метод обновления плагина после срабатывания slideToggle (), указанные проблемы с позиционированием исправляются. Вы можете увидеть скриншоты до / после здесь и здесь.
Одним из возможных обходных путей может быть программное обнаружение изменений DOM, в частности изменений в css, чтобы затем я мог перебрать каждый подсказку и вручную перезагрузить его. Однако, похоже, что нет никаких собственных событий jQuery, которые предоставляют такую функциональность. Я видел впечатляющий плагин jQuery от Rick Strahl, который отслеживает изменения CSS, но, похоже, основан на предположении, что каждый заранее знает конкретные элементы HTML, которые они хотят отслеживать. Я хочу отслеживать весь документ, так как не могу ожидать, что html-элементы могут существовать на данной странице, которые а) будут анимированными и б) будут в таком положении в документе, что они будут " толкни мои прелести. И я, конечно, не хочу нести огромные потери производительности при опросе каждого элемента уровня блока в документе.
Я должен отметить, что плагин работает отлично, если я использую его в режиме "зависания" по умолчанию, в котором подсказки отображаются только в ответ на ввод данных с помощью мыши. К сожалению, на приложение наложено конструктивное ограничение, согласно которому все ошибки проверки должны отображаться после отправки формы без дополнительного взаимодействия с пользователем.
Я уверен, что есть действительно простое / элегантное исправление, которое полностью ускользает от меня. Конечно, я мог бы избежать всего этого, просто не используя анимацию для отображения содержимого страницы, но это кажется высокой ценой.