Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.08.2016, 11:53
Новичок на форуме
Отправить личное сообщение для Griffter Посмотреть профиль Найти все сообщения от Griffter
 
Регистрация: 26.08.2016
Сообщений: 9

Проблема с событием js при открытии выпадающего списка в Firefox
Здравствуйте уважаемые разработчики!
Нужна ваша помощь! Сразу говорю, что в js не силен, так что за код сильно не критикуйте.
Кратко объясняю суть проблемы: у меня есть всплывающее окно, которое срабатывает, если мышка покидает пределы окна. В Chrome и в Opera всё работает нормально, а вот в Firefox есть проблема... событие mouseout срабатывает и тогда, когда хочешь выбрать элемент из всплывающего списка.
function addEvent(obj, evt, fn) {
    if (obj.addEventListener) {
        obj.addEventListener(evt, fn, false);
    } else if (obj.attachEvent) {
        obj.attachEvent("on" + evt, fn);
    }
}
addEvent(window, "load", function (e) {
    $('#modal_form').css('display', 'none');
    addEvent(document, "mouseout", function (e) {
        e = e ? e : window.event;
        var from = e.relatedTarget || e.toElement;
        console.log(from);
        if (!from || from.nodeName == "HTML") {
			$('#overlay').fadeIn(400, function(){ 
				$('#modal_form').css('display', 'block').animate({opacity: 1, top: '26%'}, 200);
				});
			}
        }
    });
});


В Firefox при наведении на элемент выпадающего списка переменная var from = undefined, а в Chrome к примеру всё нормально, там функция addEvent(document, "mouseout", function (e)) даже не срабатывает на выпадающем списке.
Подскажите пожалуйста, как можно исправить эту проблему с выпадающим списком в Firefox? или возможно нужно другое событие использовать?

Вот пример:
<html>
<head>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
   <style>
body {width: 100%;
height: 100%}
#modal_form {
	position: fixed;
	display: block;
	opacity: 0;
	z-index: 5; 
	background: green;
	-webkit-background-size: cover;
	background-size: cover;
	width: 200px;
	height: 200px;
	border: 4px solid #ff0000;
}
#modal_form #modal_closes {
	width: 21px;
	height: 21px;
	position: absolute;
	top: 10px;
	right: 10px;
	cursor: pointer;
	display: block;
}
#overlay {
	z-index:3; 
	position:fixed; 
	background-color:#000; 
	opacity:0.8; 
	-moz-opacity:0.8; 
	filter:alpha(opacity=80);
	width:100%; 
	height:100%;
	top:0; 
	left:0;
	display:none; 
}
</style>

<script>
function addEvent(obj, evt, fn) {
    if (obj.addEventListener) {
        obj.addEventListener(evt, fn, false);
    } else if (obj.attachEvent) {
        obj.attachEvent("on" + evt, fn);
    }
}
addEvent(window, "load", function (e) {
	$('#modal_form').css('display', 'none');
    addEvent(window, "mouseout", function (e) {
        e = e ? e : window.event;
        var from = e.relatedTarget || e.toElement;
        if (!from || from.nodeName == "HTML") {
		$('#overlay').fadeIn(400, function(){ 
			$('#modal_form').css('display', 'block').animate({opacity: 1, top: '26%'}, 200);
		});
        }
    });
});
$(document).ready(function() {
	$('#modal_close, #overlay').click( function(){
		$('#modal_form').animate({opacity: 0, top: '45%'}, 200, function(){ 
			$(this).css('display', 'none');
			$('#overlay').fadeOut(400); 
		});
	});
})
</script> 
    
</head>
<body>
    <select name="srok">
            <option value="">Выберите срок...</option>
            <option value="0.1">1 неделя</option>
            <option value="0.2">2 недели</option>
            <option value="0.3">3 недели</option>		
    </select>
     <select name="srok">
             <option value="">Выберите срок...</option>
             <option value="0.1">1 неделя</option>
             <option value="0.2">2 недели</option>
             <option value="0.3">3 недели</option>		
     </select>
<div id="modal_form" style="display:none">
	<div class="wrap-close">
		<span id="modal_close"></span> 
	</div>
</div>
	<div id="overlay"></div>
    </body>
</html>

Последний раз редактировалось Griffter, 26.08.2016 в 15:31. Причина: Дополнительная информация
Ответить с цитированием
  #2 (permalink)  
Старый 26.08.2016, 12:51
Профессор
Отправить личное сообщение для Manyasha Посмотреть профиль Найти все сообщения от Manyasha
 
Регистрация: 21.09.2015
Сообщений: 196

Griffter,
может покажите исполняемый пример работы Вашего скрипта?
Ответить с цитированием
  #3 (permalink)  
Старый 26.08.2016, 13:32
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Сообщение от Griffter
addEvent(document, "mouseout"
Потрясающе.

Проблема в 12-й строке. ФФ не знает ни того, ни другого, поэтому ундефайнед.

А зачем такая экзотика в 12-й?
Ответить с цитированием
  #4 (permalink)  
Старый 26.08.2016, 14:42
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Griffter,
Сообщение от Griffter
addEvent(document, "mouseout", function (e) {
Может, лучше навесить обработчик на интересующий вас элемент?
И тогда не надо будет искать target
Ответить с цитированием
  #5 (permalink)  
Старый 26.08.2016, 15:25
Кандидат Javascript-наук
Отправить личное сообщение для Strongman Посмотреть профиль Найти все сообщения от Strongman
 
Регистрация: 22.03.2016
Сообщений: 132

Заделйте этот код на jsfiddle.net, пожалуйста. Перед выполнением 11 строки e случайно не undefined?
Ответить с цитированием
  #6 (permalink)  
Старый 26.08.2016, 15:30
Кандидат Javascript-наук
Отправить личное сообщение для Strongman Посмотреть профиль Найти все сообщения от Strongman
 
Регистрация: 22.03.2016
Сообщений: 132

А если мышь уйдет вниз на строку состояния Windows 7,8,10, то тоже должно всплывать это окно? Если честно, как пользватель я не люблю эти всплывающие окна, достали они меня.
Ответить с цитированием
  #7 (permalink)  
Старый 26.08.2016, 15:36
Новичок на форуме
Отправить личное сообщение для Griffter Посмотреть профиль Найти все сообщения от Griffter
 
Регистрация: 26.08.2016
Сообщений: 9

Сообщение от Manyasha Посмотреть сообщение
может покажите исполняемый пример работы Вашего скрипта?
Залил исполняемый скрипт, просмотрите пожалуйста.
Ответить с цитированием
  #8 (permalink)  
Старый 26.08.2016, 15:41
Новичок на форуме
Отправить личное сообщение для Griffter Посмотреть профиль Найти все сообщения от Griffter
 
Регистрация: 26.08.2016
Сообщений: 9

Сообщение от warren buffet Посмотреть сообщение

Проблема в 12-й строке. ФФ не знает ни того, ни другого, поэтому ундефайнед.
Вроде как "e.relatedTarget" знает, консоль лог мне транслирует это.
Сообщение от warren buffet Посмотреть сообщение
А зачем такая экзотика в 12-й?
Наверное потому что на ум больше ничего не пришло)
Ответить с цитированием
  #9 (permalink)  
Старый 26.08.2016, 15:47
Новичок на форуме
Отправить личное сообщение для Griffter Посмотреть профиль Найти все сообщения от Griffter
 
Регистрация: 26.08.2016
Сообщений: 9

Сообщение от Dilettante_Pro Посмотреть сообщение
Griffter,

Может, лучше навесить обработчик на интересующий вас элемент?
И тогда не надо будет искать target
Навесил, обработчик на див в котором все находится, избавился от таргета, только проблему это не решило...
Проблема в том, что когда открываешь выпадающий список и пытаешься выбрать элемент, то оно считает, что я нахожусь за пределами браузера или не в этом диве, и срабатывает mouseout/mouseleave

Последний раз редактировалось Griffter, 26.08.2016 в 16:43.
Ответить с цитированием
  #10 (permalink)  
Старый 26.08.2016, 15:52
Новичок на форуме
Отправить личное сообщение для Griffter Посмотреть профиль Найти все сообщения от Griffter
 
Регистрация: 26.08.2016
Сообщений: 9

Сообщение от Strongman Посмотреть сообщение
Перед выполнением 11 строки e случайно не undefined?
Нет, там всё нормально вроде.
Сообщение от Strongman Посмотреть сообщение
А если мышь уйдет вниз на строку состояния..
Нет конечно. Это касается только браузера.
Я тоже не люблю, но что же поделаешь..
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
JS Drag&Drop для созданного div в FireFox фонарик Общие вопросы Javascript 2 28.02.2013 21:34
Проблема с addClass и removeClass в Firefox klev2004 Общие вопросы Javascript 1 04.07.2012 18:20
Ошибка в JS (меню - дерево). Firefox отвергает, остальные нет. ким чен ын Общие вопросы Javascript 2 23.04.2012 17:41
Проблема закрытия окна (window.close()) в Mozilla и FireFox Гость AJAX и COMET 4 06.11.2008 19:22
FireFox: onmouseover не работает при зажатой кнопке мыши no. Общие вопросы Javascript 4 19.08.2008 13:43