Comments 52
Хорошо бы подсветить код, перенести в джиквери-блог и дать ссылку на работающий пример…
«Если найду время — сделаю syntax highlight кода на Javascript (а почему нет под рукой на Хабре??).»
есть замечательный сервис — source.virtser.net/
есть замечательный сервис — source.virtser.net/
ИМХО очень неправильно создавать form через js, он должен быть изначально. Если юзер заходит с мобильного или с КПК скрипт может не отработать и тогда вообще весь функционал потеряется.
Прелесть JQuery не в том, чтобы руками велосипеды придумывать… JQ как Firefox ценен своими плагинами. На Ваш пример есть пара плагинов…
Что-то я не понял
Уж конечно не как стандартный SELECT!
Во-первых, он должен использовать справочник. То есть набор пар [«ключ», «значение»]. При этом пользователю показывается строка «значение», а на сервер отправляется «ключ».
А Разве селект не так устроен?
Уж конечно не как стандартный SELECT!
Во-первых, он должен использовать справочник. То есть набор пар [«ключ», «значение»]. При этом пользователю показывается строка «значение», а на сервер отправляется «ключ».
А Разве селект не так устроен?
там цитата, я так и не понял почему html тег не отработал. короче парсер урод=)
Я может неаккуратно выразился. Имелось в виду, что справочник должен существовать отдельно и независимо ни от чего и разделяться между разными контролами.
скока букв! :)
А что такое " Улушаем"?
2. удобный поиск нужных элементов по ID
$('#some_id')
ой, не надо вот этот пункт было достоинством приводить =) ладно бы вы написали о «глубоких» CSS-селекторах, но взять элемент по id, и это преимущество jQuery — стыдно…
Но ведь — удобно?
Удобно, просто явно пункт не для выделения достоинств jQuery, поскольку, если нужна короткая функция именно для получения элемента по id, то можно и просто алиас для document.getElementById сделать:
Но, естественно, основная суть jQuery не в этом.
var $ = document.getElementById;
$('some-id');
Но, естественно, основная суть jQuery не в этом.
ДжикВери иногда очень долго селектит, если через ксс3 селекторы, и анимация начинаят под_тупливать ;) а через айдишку, раз и пляшет %) на опыте просто сталкивался много раз ;)
Ниже автор, видимо желая доказать силу jQuery пишет
И это при живом томуже jQuery. Нехорошо.
this.style.fontWeight = 'bold';
И это при живом то
> setTimeout(function(){ func(); }, 25);
в данном случае эффективней сразу setTimeout(func, 25);
в данном случае эффективней сразу setTimeout(func, 25);
Следовательно, этот массив надо сортировать и для этого и пришлось написать быструю сортировку на Javascript и бинарный поиск.
В качестве тренировки, quick-sort можно написать, но, вообще, в JS у массивов есть метод .sort(sortFunctor), который принимает функтор сортировки. Массив объектов по конкретному полю — вполне нормально сортируется этой функцией. К тому же, Си-шный код будет работать быстрее (и, скорей всего, алгоритм на уровне реализации выбран тоже эффективный, может, и тот же quick-sort).
Встроенную сортировку можно применить к массиву объектов?
var data = [ {id: 1, name: 'a'}, {id: 3, name: 'c'}, {id: 2, name: 'b'} ]; // сортировка по "name" var sorted = data.sort(function (a, b) { var aName = a.name.toLowerCase(); var bName = b.name.toLowerCase(); if (aName == bName) { return 0; } if (aName < bName) { return -1; } return 1; });
Соответственно, можно улучшить — сделать универсальный функтор сортировки, который будет принимать имя поля параметром и возвращать соответствующую функцию.
> который принимает функтор сортировки
Не функтор, а функцию сравнения. Функтор из другой оперы (даже двух AFAIK: Си++ и теоркат)
nitpicking :)
Не функтор, а функцию сравнения. Функтор из другой оперы (даже двух AFAIK: Си++ и теоркат)
nitpicking :)
Но есть ведь юзеры которые, отключают js
Понимаюю что это бред, но такие индивидуумы еще есть.
Понимаюю что это бред, но такие индивидуумы еще есть.
Если такой индивидуум отключил js, значит он знает и как его включить. Вот пусть и включает.
Дорогой друг, сейчас еще навлечу МИНУСОВ на свою голову.
Но могу сказать что есть пользователи которые незнаю что такое браузер,
А что такое JS и как его включить или выключить, для них это вообще темный лес.
По работе часто сталкиваюсь с такими юзерами.
Поскольку проэкты в основном социального характера, и на них 70% юзверов это домохозяйки и тинейжеры.
Но могу сказать что есть пользователи которые незнаю что такое браузер,
А что такое JS и как его включить или выключить, для них это вообще темный лес.
По работе часто сталкиваюсь с такими юзерами.
Поскольку проэкты в основном социального характера, и на них 70% юзверов это домохозяйки и тинейжеры.
Многабуков.
«Упорная проверка опций» делается при помощи jquery-евского extend-а: docs.jquery.com/Utilities/jQuery.extend
«Упорная проверка опций» делается при помощи jquery-евского extend-а: docs.jquery.com/Utilities/jQuery.extend
Вы думаете, что вот это будет удобно? —
Далее…
return "\ <tr><th>Ваше имя <td><INPUT name=user_name>\ <tr><th>Ваш пол <td><INPUT name=sex truevalue='u'>\ <tr><th>Страна происхождения <td><INPUT name=birth_country>\ <tr><th>Страна проживания <td><INPUT name=country>\ ";
Далее…
Чего хочется?
- Полностью отвязать HTML-код форм от данных. — Что-то не понимаю, мне кажется, этого вы не добились, нет?
- Иметь возможность предзагрузки форм. — $(element).val() не подойдет?
- Иметь возможность гибко настраивать форму. — Это вообще песня. Под такое требование можно что угодно подогнать, хоть бы и то, с чего я начал свой комментарий… К тому же, вы на этом пункте как-то совсем не остановились.
- Иметь удобный выпадающий список с поиском по началу имени. — $(element).autocomplete() ? А то есть и еще куча готовых решений, незачем было в этом топике приводить полностью свое, это ведь, очевидно, не главное, о чем вы собирались поведать. (Я не говорю, что не надо писать ничего своего, просто вы смешали два топика — свой вариант автокомплита для JQuery + свое видение удобных форм)
- Отвязать контролы формы от ее окружения. — Это вообще о чем? Мне одному эта фраза кажется инопланетной?
- И так далее. — ???
> Вы думаете, что вот это будет удобно? —
Это можно автоматически генерить, я только показал что именно возвращается…
> Полностью отвязать HTML-код форм от данных.
Отчего же нет? У меня есть как минимум два интересных вызова.
director.fill('instance', object) — заполняет форму данными из javascript-объекта, а director.record('instance') возвращает данные формы в виде javascript-объекта.
То есть можно свободно перемещать данные отдельно и формы отдельно.
> Иметь возможность предзагрузки форм. — $(element).val() не подойдет?
Предзагрузки на страницу.
> Иметь возможность гибко настраивать форму
Имелось в виду, что настроечный код формы должен иметь возможность ее как угодно настроить. То бишь он должен иметь доступ к форме и ко всем возможностям jQuery, но быть отвязанным от контекста, чтобы его можно было многократно вызывать при создании экземпляра формы…
> Иметь удобный выпадающий список с поиском по началу имени.
Да, я просто хотел показать как довольно просто в jQuery сделать свой контрол.
Почти все готовое UI что я видел для jQuery — ущербно или ужасно.
Боюсь даже DatePicker не смогу взять, придется свой делать… :(
> Отвязать контролы формы от ее окружения
Имеется в виду размещение контролов. Это еще пока не сделано.
Я хочу сказать, что обычно layout контролов формы задается уже самим HTML.
А хорошее решение должно предусматривать получение контролов как отдельных элементов и «нашпиговку» ими некоей раскладки.
То бишь к форме может быть прицеплен некий layoutManager, который контролы может разместить разными способами.
Например, в виде таблицы. Или еще как-то. Например, можно ему сказать, чтобы подогнал элементы ближе друг к другу. Итд
Это можно автоматически генерить, я только показал что именно возвращается…
> Полностью отвязать HTML-код форм от данных.
Отчего же нет? У меня есть как минимум два интересных вызова.
director.fill('instance', object) — заполняет форму данными из javascript-объекта, а director.record('instance') возвращает данные формы в виде javascript-объекта.
То есть можно свободно перемещать данные отдельно и формы отдельно.
> Иметь возможность предзагрузки форм. — $(element).val() не подойдет?
Предзагрузки на страницу.
> Иметь возможность гибко настраивать форму
Имелось в виду, что настроечный код формы должен иметь возможность ее как угодно настроить. То бишь он должен иметь доступ к форме и ко всем возможностям jQuery, но быть отвязанным от контекста, чтобы его можно было многократно вызывать при создании экземпляра формы…
> Иметь удобный выпадающий список с поиском по началу имени.
Да, я просто хотел показать как довольно просто в jQuery сделать свой контрол.
Почти все готовое UI что я видел для jQuery — ущербно или ужасно.
Боюсь даже DatePicker не смогу взять, придется свой делать… :(
> Отвязать контролы формы от ее окружения
Имеется в виду размещение контролов. Это еще пока не сделано.
Я хочу сказать, что обычно layout контролов формы задается уже самим HTML.
А хорошее решение должно предусматривать получение контролов как отдельных элементов и «нашпиговку» ими некоей раскладки.
То бишь к форме может быть прицеплен некий layoutManager, который контролы может разместить разными способами.
Например, в виде таблицы. Или еще как-то. Например, можно ему сказать, чтобы подогнал элементы ближе друг к другу. Итд
@ «Ничо не понимаю»
Имхо, правильнее всего было писать html форму (select, input и т.п.), а уже после загрузки документа инициализировать скрипт, меняющий поведение формы (к примеру, заменять select)…
Такой способо вернее, т.к. форма будет работать и без поддержки JS у клиента.
Имхо, правильнее всего было писать html форму (select, input и т.п.), а уже после загрузки документа инициализировать скрипт, меняющий поведение формы (к примеру, заменять select)…
Такой способо вернее, т.к. форма будет работать и без поддержки JS у клиента.
такой способ вернее, но сам select будет тогда «прыгать» на странице — сначала покажется обычный, а потом только стилизованный…
Если вставлять JS-код перед таким селектом, то мы нестилизованный не увидим, конечно. Но и ничего вместо него тоже не увидим, пока будет скрипт грузиться и исполняться.
В общем, корректного решения данной проблемы, насколько мне известно, нет.
Если вставлять JS-код перед таким селектом, то мы нестилизованный не увидим, конечно. Но и ничего вместо него тоже не увидим, пока будет скрипт грузиться и исполняться.
В общем, корректного решения данной проблемы, насколько мне известно, нет.
Ну если вам не подуше, как вы говорите «пряганье» элементов формы — тогда просто скройте их.
В самом начале документа, скриптом подключите таблицу стилей с display:none для элементов формы. И тогда они у вас (клиентов с JS) не покажутся, отобразится лишь сгенерированный скриптом функционал.
У тех, у кого JS неподдерживается, таблица стилей не подключится и элементы формы будут видны…
Еще можно использовать noscript, но способ выше мне кажется более изящным, без лишнего кода/веса документа.
В самом начале документа, скриптом подключите таблицу стилей с display:none для элементов формы. И тогда они у вас (клиентов с JS) не покажутся, отобразится лишь сгенерированный скриптом функционал.
У тех, у кого JS неподдерживается, таблица стилей не подключится и элементы формы будут видны…
Еще можно использовать noscript, но способ выше мне кажется более изящным, без лишнего кода/веса документа.
я соглашусь, что Ваш вариант, пожалуй, самый верный, но он не сильно спасает. Например, если будет большая задержка в отрисовке кастомных элементов, а пользователь начнет заполнять остальные части формы? или попробует ее отправить?
было бы неплохо ещё ссылку на рабочий пример
extjs
Sign up to leave a comment.
Улучшаем формы или Веб-Восемь-Ноль-Сто-Три