2011-11-02 1 views
2

У меня есть элемент SELECT на веб-странице, и я бы хотел, чтобы он загружался прокруткой вниз. В большинстве браузеров, я могу это сделать:Javascript: Программно прокручивать не всплывающий элемент SELECT снизу в Chrome

myselect.scrollTop = myselect.scrollHeight; 

Хотя scrollHeight находится вне границ, браузеры понять это и ограничить его соответствующим образом. За исключением Google Chrome. Я могу подать отчет об ошибке, но это не помогает мне с моей непосредственной проблемой. Поэтому я пробовал это:

myselect.scrollTop = myselect.scrollHeight - myselect.clientHeight; 

Но это вычиталось слишком много - были предметы под днищем элемента. Я также попытался вычесть offsetHeight, но это было немного хуже.

Кто-нибудь знает какой-либо браузер-агностик, чтобы правильно рассчитать scrollTop, который должным образом связан, чтобы он работал с Chrome?

BTW, я нашел этот вопрос на stackoverflow: Cross-Browser method for setting ScrollTop of an element?. Возможно, это работает для DIV, но не для элементов SELECT и/или нет в Chrome.

Спасибо!

UPDATE: Вот HTML-страница, которая демонстрирует проблему:

<html> 
<head> 

<style type="text/css"> 
.fields9{font-size:15px;height: 180px; width:420px; overflow: auto; border:1px solid #2d2b2d;} 
</style> 

</head> 
<body> 

<select multiple="multiple" size="10" id="myselect" class="fields9"> 
<option>firstone</option> 
<option>option</option> 
<option>option</option> 
<option>option</option> 
<option>option</option> 
<option>option</option> 
<option>option</option> 
<option>option</option> 
<option>option</option> 
<option>option</option> 
<option>option</option> 
<option>option</option> 
<option>option</option> 
<option>option</option> 
<option>option</option> 
<option>option</option> 
<option>option</option> 
<option>option</option> 
<option>option</option> 
<option>option</option> 
<option>option</option> 
<option>option</option> 
<option>option</option> 
<option>option</option> 
<option>option</option> 
<option>option</option> 
<option>option</option> 
<option>option</option> 
<option>option</option> 
<option>option</option> 
<option>option</option> 
<option>lastone</option> 
</select> 

<script type="text/javascript"> 

element=document.getElementById("myselect"); 
//element.scrollTop = element.scrollHeight; 
element.scrollTop = element.scrollHeight - element.clientHeight; 

</script> 

</body> 
</html> 

Если я рассматриваю это в Chrome, последний вариант «LaStone» в основном отрезать дно. НО, если я удалю атрибут class="fields9", проблема исчезнет.

+0

Можете ли вы настроить jsfiddle, чтобы показать проблему, потому что scrollHeight работает в хроме, я использую его все время. – Ryan

+0

Надеюсь, код, который я вставлял в мое редактирование, - это то, что вы искали. –

ответ

2

Избавьтесь от переполнения: auto в объявлении fields9, чтобы он работал правильно в Firefox и Chrome. Вот рабочий пример: http://jsfiddle.net/c4LDv/7/.

К сожалению, я не смог найти решение заставить его работать в Opera - видимо, вы не можете прокручивать выбрать в Опере программно ...

Edit: Я придумал с хакерским подходом, используя selectedIndex для запуска прокрутки до последней опции. Посмотрите здесь: http://jsfiddle.net/c4LDv/16/ работает в Chrome, Firefox и Opera. Однако - он не будет прокручиваться до последней опции в Opera, если один или несколько параметров уже выбраны (при загрузке страницы) - см. Здесь http://jsfiddle.net/c4LDv/15/ - Я не смог переопределить это поведение.

 Смежные вопросы

  • Нет связанных вопросов^_^