Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Находиться ли курсор над объектом, когда клик вне него (объекта) (https://javascript.ru/forum/jquery/21296-nakhoditsya-li-kursor-nad-obektom-kogda-klik-vne-nego-obekta.html)

kichSman 04.09.2011 14:51

Находиться ли курсор над объектом, когда клик вне него (объекта)
 
Уважаемые форумчане. Помогите с реализацией следующей цепочки событий.

Нужно определить нажатие курсора вне объекта (div) и его дочерних объектов (например select-а с его option). Пробовал разные варианты, в т.ч. и с присвоением булевой величины при hover над div. Но проблема возникла тогда, когда раскрывающийся список больше блока, а именно при выборе option - переменная просто не изменяется ("замораживается"), даже при выходе из поля дива.

Заранее признателен за любые варианты.

Андрей Параничев 04.09.2011 15:00

Option не является "полноценным" элементом. Его задание для браузера имеет информационный характер, для отрисовки dropdown меню select.

Поэтому option, как и список всех опций select, не генерирует события мыши и, соответственно, эти события не "всплывают".

Если вам нужно отловить изменение списка, попробуйте событие "change".
А вообще, без объяснения какая перед вами стоит конкретная задача, помочь будет сложно.

kichSman 04.09.2011 15:07

Цитата:

Сообщение от Андрей Параничев (Сообщение 124714)
Если вам нужно отловить изменение списка, попробуйте событие "change".
А вообще, без объяснения какая перед вами стоит конкретная задача, помочь будет сложно.

Событие change в моем случае не вариант, хотя при этом я и пытался повторно приравнивать переменную в true (т.е. что курсор остается над боксом) - всеравну не помогло.
Суть же моей реализации, что то на подобии всплывающего блока, которые содержит селекты, которые могут выходить за пределы блока.
И всеже, всеравно спасибо, за подсказку "Option не является "полноценным" элементом" - видимо именно в этом то и корень зла)).
Может помучиться через target в событии самого документа?

Magneto 04.09.2011 15:16

<html>
<head>
<style type="text/css">
*{
  margin:0;
  padding:0}
div{
  width:100px;
  height:30px;
  position:absolute;
  top:30%;
  left:30%;
  background:#1d1}
#wrapper{
  background:#d11;}
</style>
<script type="text/javascript">
window.onload = function () {

  var wrapper = document.getElementById('wrapper');

  document.addEventListener('mousedown', function () { alert('Вы кликнули вне дива') }, false);

  wrapper.addEventListener('mousedown', function (e) { e.stopPropagation() }, false);

}
</script>
</head>
<body>
  <div id="wrapper">
    <select>
      <option>пункт 1</option>
      <option>пункт 2</option>
      <option>пункт 3</option>
      <option>пункт 4</option>
      <option>пункт 5</option>
      <option>пункт 6</option>
    </select>
  </div>
</body>
</html>

kichSman 04.09.2011 16:18

Цитата:

Сообщение от Magneto (Сообщение 124717)
...

Просто супер, спасибо ;)


Часовой пояс GMT +3, время: 06:50.