Скрыть div блок по событию перемещение курсора или клика
Добрый день. Прошу помощи.
Есть div блок который появляется если ввести букву в поле input. Прошу подсказать с кодом, который бы скрывал это div блок если курсор был перемещен (с помощью tab кнопки) в другое поле input или был нажат клик мимо этого div блока (если был сделан клик в сам этот div блок, то он не пропадал бы). Буду благодарен за помощь. |
Я же задавал вопрос - даже если поле становится активным при tab, то разве это не означает, что оно получило фокус? А если получило, то какое событие возникает?
Ну напишите вы свой код как единое целое, а не кусками, определитесь с элементами их взаимодействием, так чтобы сразу установить обработчики всем событиям возникающим в вашей задаче. Плагины ведь так пишут, а не "вне их" еще и куча обработчиков. Кто же вам мешает при получении фокуса элементом, скрыть все div у других элементов кроме принадлежащего текущему input? А если принадлежит input, то почему обработка его поведения должна описывается через ХХХХ строчек кода? А как действовать при щелчке вне элемента вы уже знаете. |
Хоть и на писано, что я аспирант, но это не так...скорее абитуриент (хотя и не факт еще)...
вобщем есть пока вот такой код (код появления при вводе символа-буквы здесь не указываю): $(document).focusout(function(event){ if( $(event.target).closest("#autocomplete").length ) return; $("#autocomplete").fadeOut("slow"); event.stopPropagation(); }); при нажатие кнопки tab (перемещение в другой input) div-блок скрывается, так же при клике скрывается, но хотелось бы, что если клик в сам div блок, то он не скрывается. <div id="autocomplete"></div> |
Цитата:
|
если Вам не сложно, можно тоже самое только другими словами и если с кодом, то может больше понимание появиться.
|
вот пока такая наработка:
$(document).click(function(event) { if ($(event.target).closest("#autocomplete").length) return; $("#autocomplete").fadeOut("slow"); event.stopPropagation(); }); $("#pass3").focusin(function(event){ if( $(event.target).closest("#autocomplete").length ) return; $("#autocomplete").fadeOut("slow"); event.stopPropagation(); }); хотелось бы что в самом inpute pass2 не реагировал на клик |
Цитата:
|
<form method="post" action="add_finish.php" name="formName"> <input class="addrs" type="text" name="addrs" placeholder=" Введите " type="search" value="" id="pass2"/> <input class="addrs" type="text" name="addrs" placeholder=" Введите " type="search" value="" id="pass3"/> </form> <div id="autocomplete"></div> if ($(event.target).closest("#autocomplete").length) return; if(event.target.id != 'pass2') $("#autocomplete").fadeOut("slow"); event.stopPropagation(); }); $("#pass3").focusin(function(event){ if( $(event.target).closest("#autocomplete").length ) return; $("#autocomplete").fadeOut("slow"); event.stopPropagation(); }); еще вот вопрос появился...обратил внимание, что если в другом input-е есть значение и как бы кликнуть туда мышкой и сразу выделить это значение, то это уже событие не является кликом???? |
Цитата:
Событие onclick, это вообще-то результат двух событий - onmousedown и onmouseup, которые наступают по очереди. Все эти три события есть не потому, что это закономерность и иначе нельзя, а потому, что это определено разработчиками программ и "железяк". Правильнее будет "эти три события генерируются системой". С таким же успехом можно было бы добавить генерацию еще двух событий вкупе к этим трем: "как бы нажата кнопка мыши - onasifmousedown" и "как бы отпущена кнопка мыши - onasifmouseup". Система не мгновенно генерирует события в ответ на нажатия кнопок, а сначала возникает аппаратное прерывание, затем контроллер устройства обрабатывает так называемый "дребезг контактов", формируя некоторую задержку, в течении которой постоянно опрашивает порт вызвавший это прерывание. Если по истечению этой задержки кнопка останется нажатой, тогда принимается решение - "да, есть нажатие". И только затем это событие отдается системе, но система генерирует уже программное прерывание. И уж как его обозвать, это решается в зависимости от устройства и его драйвера. Вот за мышкой и закреплен набор стандартных для нее событий порожденных аппаратными прерываниями, но не проблема добавить еще кучу новых, наворотив супер мышку и написав для нее драйвер. Так что события породившее щелчок мыши никуда не денутся, а вот выделение текста, это уже чисто программное прерывание, то бишь событие, которое порождается системой или ПО. Нужно только отлавливать события и никуда они не денутся, и "перерождаться" во что-то иное не будут. |
Цитата:
|
Часовой пояс GMT +3, время: 20:40. |