Formator
Часто пишу интерфейсы (админки и т.п.), порой довольно сложные. Постоянно сталкиваюсь с проблемой вложенности, когда элементы форм зависят друг от друга. Если сталкивались, то понимаете, какой геморный код надо писать, чтобы вывести и спрятать те или иные элементы при включении/выключении или определённых значениях других. "Если чекбокс1 включён и значение поля2 равно тому-то, то показать форму3, иначе ..." и так далее. Прострой пример использования - различные опросники, анкеты, визарды и т.п.
Попробовал решить эту проблему, подойдя с совершенно другой стороны. Чтобы привязать один элемент к другому, надо просто сослаться на него таким образом: if (#id_элемента==значение) Если выражение верно, то элемент отображается. Если неверно - то скрывается. Всё делается автоматом. Сами выражения пишутся внутри этих же элементов:
Код:
<input type="checkbox" id="cb1"> <input type="checkbox" class="if (#cb1)" id="cb2"><input type="checkbox" class="if (#cb2)" id="cb3">
Вот так, через атрибут class. Как видно, чекбокс 2 смотрит, включён ли чекбокс 1, а чекбокс 3 смотрит на чекбокс 2. Таким образом, если не включён чекбокс 1, то последние два не отображаются и т.п. по цепочке. Выражения могут быть с несколькими условиями: if((#элемент1==значение1 || #элемент1==значение2) && #элемент2==значение3) и т.п.
На элементы можно без проблем накладывать свои классы, только делать это надо вначале, перед "if"
Обращаться можно по имени ($имя_элемента) и по id (#id_элемента). Обращение по id предпочтительнее, т.к. оно не тормозит в IE. Обращение по имени лучше использовать только при работе с radio, когда у нескольких элементов может быть одно имя, или когда западло проставлять id.
Инициализация всего:
Код:
$(".if","#ид_формы").easyForm();
Комплексный пример работы:
http://cjlog.com/botva/forms.html (тут в html source можете глянуть, на сколько всё просто)
Исходник:
http://cjlog.com/botva/jquery.easyForm.js
Надеюсь, кому-нибудь пригодится
Оффтопик: Надо бы наверно завести блог, а то столько всего полезного накопилось, что не жалко для народа