Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > onmouseup на скролле в ИЕ


Автор: Burrr 14.4.2006, 18:37
Чтобы сразу было понятно о чем речь, привожу в пример код:
Код

<body>
<script type="text/javascript">
function mouse_down(){
    document.getElementById("mouseev").innerHTML='Мышь: <b>нажата</b>';
}
function mouse_up(){
    document.getElementById("mouseev").innerHTML='Мышь: <b>отпущена</b>';
}
</script>
<div onmousedown="mouse_down()" onmouseup="mouse_up()" style="width:200px;height:100px;overflow:auto;border:1px solid #000000">
1<br>2<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>
1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>
</div>
<br>
<div id=mouseev>Состояние мыши</div>
</body>

В ИЕ при нажатии-отпускании клавиши мыши внутри ДИВ-а, всё работает как положено. Однако при нажатии клавиши на скролле, событие отпускания (mouseup) не срабатывает. В Гекко такого не наблюдается, всё работает как надо. Помогите пофиксить эту ИЕ-шную багу! smile

Автор: 12345c 14.4.2006, 20:05
Можно уменьшить вред введением

<div ... onscroll=f()

и обработкой. Но там всё равно event.button не отлавливается, отпускание не определишь.

Автор: Иль 17.4.2006, 02:10
Burrr, сделай через просачивание событий и отлов события на родительском элементе. То есть оберни первый div в еще один div с CSS/height:auto и лови события на нем.
Ничего не обещаю сам не проверив, но должно работать smile
Можешь сказать, почему тебе onClick не достаточно (если это не в образовательных целях конечно), тк может по другому порешится?

Burrr, 12345c сами не хотите поэксперементировать? напишите? 

Автор: Иль 17.4.2006, 02:35
Хотя, можно и на body отлавливать события.
А может такое решение тоже не стработает. Надо пробовать, как там на скроле себя ИЕ поведет.
Видать скрол это отдельная нода, вне видимого DOM. Такое поведение я в Gecko замечал.

Добавлено @ 02:36 
Но кажись у меня все работало  smile  

Автор: Burrr 17.4.2006, 08:10
Цитата

Burrr, сделай через просачивание событий и отлов события на родительском элементе. То есть оберни первый div в еще один div с CSS/height:auto и лови события на нем.

Событие к сожалению не просачивается, такое ощущение, что оно в ИЕ не возникает. Ни на внешнем ДИВе, ни в БОДИ его нет  smile 
Зато, если намеренно допустить ошибку в обработчике mouseDown (например поставить exit;), то mouseUp срабатывает. Такое ощущение, что mouseDown просто не прекращается. К сожалению работающий вариант с ошибкой в строке статуса также не подходит. Неужели нет решений? 
Цитата

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

Решаю довольно нетривиальную задачу, связанную со скроллом и в силу определенных причин нужно отловить именно mouseup в диве. 

Автор: Иль 17.4.2006, 14:51
Попробую тогда сам замутить скипт. Может вечером. 

Автор: Иль 20.4.2006, 08:47
Замутил, убедился  smile 
При клике на самой пимпочке скрола без ее сдвига все возможные события после mouseDown не зажгутся.
Тупик  smile 

Автор: Burrr 21.4.2006, 17:07
Жаль!
Спасибо, что приложили усилия для решения задачи!

Хорошо бы сделать какой-нить форум (или тему) для таких вот задач (под рубрикой impossible smile ), может кто-нить со временем и решит. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)