Выбрать все, кроме одного div'а. Как?
Здравствуйте.
Необходимо сделать, чтобы форма авторизации всплывала при нажатии на ссылку и исчезала при клике в любом месте, кроме всплывающего блока с формой. Подскажите как это сделать?? Не могу сделать вторую часть задачи (выбрать все, кроме всплывающего блока). <body> <p class="login"><a href="#">Log in</a></p> <div id="appearing-box"> <form action=""> <fieldset> <table> <tr> <td>Логин:</td> <td><input type="text" value="" /></td> </tr> <tr> <td>Пароль:</td> <td><input type="password" value="" /></td> </tr> <tr> <td></td> <td><input type="submit" value="Войти" /></td> </tr> </table> </fieldset> </form> </div> </body> $(document).ready(function(){ $("p.login a").click(function(){ $("#appearing-box").show("fast"); return false; }) $(":not(#appearing-box)").click(function(){ $("#appearing-box").hide() }) }); |
Ставим onclick на весь документ, смотрим, не является ли event.target нужным вам блоком (или его потомком), если нет — скрываем блок.
|
Цитата:
|
$(document).click(function(e) { e = e || window.event; t = e.target || e.srcElement; if (!$(t).is('#block') && !$(t).parents().find('#block').size()==0) { $('#block').hide(); } }); |
$(document).click(function(e){ e = e || window.event; t = e.target || e.srcElement; if (!$(t).is('#appearing-box') && $(t).parents().find('#appearing-box').size()==0) { $('#appearing-box').hide(); } }); Убрал отрицание у второго условия. Иначе был обратный эффект. Еще, не могли бы вы раскрыть смысл 2-ой и 3-ей строк. Не совсем понятно, что это. А селектором :not нельзя тут обойтись?? |
Юрий Шу, ввиду того, что используется jQuery, 2-3 строки смысла лишены совершенно -- это нормализация события и target'a, она делается jQuery до обработчика.
|
e1f, то есть это как-то сократить можно?
что такое target подскажите тоже… |
$(document).click(function(e){ if (!$(e.target).closest('#appearing-box').length) { $('#appearing-box').hide(); } }); target либо srcElement (смотря где) -- тот элемент, который инициировал событие |
Цитата:
|
Да. Это приведение к кроссбраузерному виду.
|
Часовой пояс GMT +3, время: 06:02. |