Проблема со тэгом select в IE

12
O
На сайте с 21.04.2012
Offline
2
1093

Есть блок на котором установлены события onmouseover и onmouseout. В этом блоке находиться select. При нажатии на селект выпадает список из вариантов. Так вот IE8 (в отличае от других браузеров) интрерпретирует этот список как вообще другой блок который не имеет отношения к к select. Тоесть когда я навожу мышку на этот список срабатывает событие onmouseout.

Что можно сделать?

D1
На сайте с 03.12.2011
Offline
39
#1
Orsat:


Что можно сделать?

ничего не видя сложно сказать, обратитесь к верстальщику

Алексей Барыкин
На сайте с 04.02.2008
Offline
272
#2
Orsat:
Есть блок на котором установлены события onmouseover и onmouseout. В этом блоке находиться select. При нажатии на селект выпадает список из вариантов. Так вот IE8 (в отличае от других браузеров) интрерпретирует этот список как вообще другой блок который не имеет отношения к к select. Тоесть когда я навожу мышку на этот список срабатывает событие onmouseout.

Что можно сделать?

Разместите проблему тут jsfiddle.net и дайте нам ссылку.

O
На сайте с 21.04.2012
Offline
2
#3
Алексей Барыкин:
Разместите проблему тут jsfiddle.net и дайте нам ссылку.

На сколько я понял там нельзя выбрать браузер для которого осуществляется тест.

Тем не менее.

<div onmouseout="alert('da')">

<select>
<option>Тест</option>
</select>
</div>

Если этот код запустить в IE8 то при наведении на список который откроется в селекте сработает alert, а этого быть не должно.

S
На сайте с 08.05.2007
Offline
63
#4
Orsat:
На сколько я понял там нельзя выбрать браузер для которого осуществляется тест.

Тем не менее.

<div onmouseout="alert('da')">

<select>
<option>Тест</option>
</select>
</div>


Если этот код запустить в IE8 то при наведении на список который откроется в селекте сработает alert, а этого быть не должно.

а если эти события повесить прямо на <select>?

DiAksID
На сайте с 02.08.2008
Offline
236
#5
Orsat:
... Если этот код запустить в IE8 то при наведении на список который откроется в селекте сработает alert, а этого быть не должно.

с чего это вдруг "не должно" ? да ещё в осле.

это обычный трабл когда реакция на мышь вешается на блок, чей размер задаётся не в прямую, а "динамически" - за счёт внутреннего контента. тогда идёт странная, на первый взгляд, реакция мыши на всякие padding-и и margin-ы - они становятся "ничейной" территорией и сбрасывают реакцию мыши. а для select отступы задаются браузером, через css полностью их не изменить (броузер не даёт до конца сломать свой тип рендеринга select-а).

show must go on !!!...
O
На сайте с 21.04.2012
Offline
2
#6
DiAksID:
с чего это вдруг "не должно" ? да ещё в осле.

это обычный трабл когда реакция на мышь вешается на блок, чей размер задаётся не в прямую, а "динамически" - за счёт внутреннего контента. тогда идёт странная, на первый взгляд, реакция мыши на всякие padding-и и margin-ы - они становятся "ничейной" территорией и сбрасывают реакцию мыши. а для select отступы задаются браузером, через css полностью их не изменить (броузер не даёт до конца сломать свой тип рендеринга select-а).

Какие отступы, какие динамические размеры? Тут проблема в том что IE интерпретирует список вариантов для select как элемент не пренадлежащий к select, в отличае от других браузеров. Поэтому когда машка попадает на этот список срабатывает событие. Если даже событие onmouseout заменить на onmouseleave, то будет такая же ситуация.

Конечно можно решаить проблему если использовать события еще onblur и onfocus, при фокусе задавать булев тип тру, а при блур false, и onmouse out выполнять только когда этот булев тип false, тоесть селект не открыт. Но это липилово.

D1
На сайте с 03.12.2011
Offline
39
#7

мне кажется у вас трабла именно в цсс, потому как одно адекватное и грамотное свой-во, может может неправильно интепретировать свой-ва всего элемента в ие( за что ему отдельная похвала)

Ayavryk
На сайте с 11.10.2003
Offline
209
#8

1. Читайте про "всплывание событий" в JS

2. Юзайте фреймворки. Их для того и придумали, чтобы не ломать голову над разными странностями в разных броузерах.

Тынгыр, мынгыр, комсомол (http://erum.ru). Ехари, ехари, (жалобно) аяврик. /народная тунгусская песня/
O
На сайте с 21.04.2012
Offline
2
#9
Ayavryk:

2. Юзайте фреймворки. Их для того и придумали, чтобы не ломать голову над разными странностями в разных броузерах.

Например? Какой фреймвок может решить проблему кроссбраузерности?

Ayavryk
На сайте с 11.10.2003
Offline
209
#10
Orsat:
Например? Какой фреймвок может решить проблему кроссбраузерности?

Я же написал.

У вас очевидно происходит "всплывание" событий. Т.е. когда вы проводите мышкой по какому-то элементу у вас mouseover начинает распростараняться по всем родительским элементам. вплоть до HTML. Причем порядок всплывания и способ прерывания всплывания в разных броузерах разный.

Дальше у вас два варианта. Вы выучите как это все работает и в милионный раз повторите чужой код получающий кроссброузерный обработчик этого события или забудете как страшный сон и выучите простую процедуру в jquery (или еще где-то) :

$('div').hover{
function(){ alert('Мышь вошла в блок') },
function(){ alert('Мышь вышла из блока') }
}

UPD знание jquery вообще-то не освобождает от знания JS, но освобождает кучу времени и сил от борьбы со всякой рутиной.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий