Это просто для того, чтобы конкретизировать мой комментарий ранее и повторить то, что сказал Рик.
Я пробовал следующее (в Safari):
- Использование простого javascript (без jQuery): Все еще медленно
- Использование div вместо таблиц: Все еще медленно
- Использование
innerHTML
вместо .clone()
/ cloneNode()
: Все еще медленно
- Перемещение шаблона из формы: Все еще медленно
- Создание элементов с нуля вместо клонирования: Все еще медленно
- Добавление всего к временному элементу вне формы и последующее его перемещение: Все еще медленно
- Скрытие формы при добавлении элементов: Все еще медленно
- Удаление атрибутов имени на элементах ввода перед клонированием / копированием / чем-либо еще: Все еще медленно
- Удаление атрибутов в самой форме: Все еще медленно
- Использование простой нумерации вместо именования в стиле списка (т.е. "nameX" вместо "name []"): Все еще медленно
Итак, опять же, пока вы добавляете эти select
входные данные к элементу формы, это будет медленно.
Но, как предложил Рик, вы можете добавить входные данные к элементу вне формы и использовать JS для их сериализации и отправки.
Кроме того, вы можете добавлять input type="hidden"
элементы к форме (что быстро) к форме, добавляя фактические select
элементы к чему-то вне формы. Тогда вы можете использовать слушатели событий, чтобы скрытые входы отражали значения выбора. Скрытые входные данные будут отправлены вместе с формой, в то время как выбранные функции действуют как пользовательский интерфейс.
Другим вариантом было бы иметь выпадающие списки в разметке для начала (что, как я подозреваю, браузер рендерит быстро), но их отключение и скрытие. Затем используйте JavaScript, чтобы отобразить и включить раскрывающиеся списки при необходимости. Я не знаю, приведет ли это также к замедлению, но поскольку новые элементы не добавляются, это должно быть быстрее.
Все еще не объясняет медлительность (или почему она так быстро работает в FF6)