в общем
у меня проблема
нужно сверстать селект
но после мучительных поисков, проб и ошибок, я понял, что тег option толком не форматируется
тогда я наткнулся на тред про замену селекта списком
всё красиво выглядит
но мне надо, чтобы он раскрывался не при нажатии, а при наведении
а в яве я не силён
я так и не понял как переписать код под себя
вот код
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html>
<head>
<title>Замена элементов select</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<style>
select {
display: block;
margin: 0 0 10px;
width: 207px;
}
/* стили необходимые для работы скрипта */
select.srReplacedSelect {
width: 1px;
position: absolute;
left: -999em;
}
ul.srList {
list-style:none;
padding:0;
/* лучше всего техника работает
для элементов фиксированной ширины
хотя при некоторых дополнителных
требованиях к изображению и небольшом
изменение стилей ее можно применять
и для резиновых select`ов */
width: 207px;
margin: 0 0 10px;
/* поскольку используется техника
Sliding Doors элемент хорошо переносит
масштабирование шрифтов, для этого
его высоту нужно задать в em */
height:1.5em;
}
ul.srList li {
display:none;
background: #eee;
line-height:1.5em;
padding:0 10px;
width:187px;
}
ul.srList li.srHoverLi {
background: wheat;
}
ul.srBlur {
background: url('srBgTop.png') no-repeat;
}
ul.srFocus, ul.srHoverUl {
/* чтобы при наведении мышки
или получении фокуса элемент
не оставался на некоторое время без фона,
и для ускорения загрузки, совмещаем
два фоновых изображения в одном и изменяем его
подвигая на 300 пикслей влево */
background: url('srBgTop.png') no-repeat -207px 0px;
}
ul.srBlur li.srSelectedLi {
display:block;
background: url('srBgBottom.png') no-repeat 0px 100%;
}
ul.srFocus li.srSelectedLi, ul.srHoverUl li.srSelectedLi {
display:block;
background: url('srBgBottom.png') no-repeat -207px 100%;
}
ul.srExpanded li.srSelectedLi {
display:block;
background: wheat;
}
ul.srExpanded {
position:relative;
/* при разворачивании списка,
нужно выдвинуть его на первый
план, иначе другие элементы будут
перекрывать опции */
z-index:1000;
}
ul.srExpanded li {
display:block;
}
</style>
<script>
function rsSelectReplace(sel)
{
//а вдруг мы на осле :)
var ie6 = (navigator.userAgent.search('MSIE 6.0') != -1);
var ul = document.createElement('ul');
//список заменяющий select, свернутый, не в фокусе
ul.className = 'srList srCollapsed srBlur';
//связь между ul и select
ul.srSelect = sel;
sel.srReplacement = ul;
//устанавливаем для элемента select
//класс показывающий, что он замещен
sel.className += ' srReplacedSelect';
//меняем класс элемента ul
//при получении и потере фокуса
//элементом select
sel.onfocus = function() { this.srReplacement.className = this.srReplacement.className.replace(/[\s]?srBlur/, ' srFocus'); }
sel.onblur = function() {
//this.srReplacement.srCollapse();
this.srReplacement.className = this.srReplacement.className.replace(/[\s]?srFocus/, ' srBlur');
}
//каждый браузер болеет по своему
//поэтому обрабатываем и onchange и onkeypress
sel.onchange = function()
{
var ul = this.srReplacement;
ul.srSelectLi(ul.childNodes[this.selectedIndex]);
}
sel.onkeypress = function(e)
{
var i = this.selectedIndex;
var ul = this.srReplacement;
switch (e.keyCode) {
case 9:
this.srReplacement.srCollapse();
break;
case 37: // влево
case 38: // вверх
if (i - 1 >= 0)
ul.srSelectLi(ul.childNodes[i - 1]);
break;
case 40: // вниз
if(e.altKey)
{
//ul.srExpand();
//break;
}
case 39: // вправо
if (i + 1 < ul.childNodes.length)
ul.srSelectLi(ul.childNodes[i + 1]);
break;
case 33: // Page Up
case 36: // Home
ul.srSelectLi(ul.firstChild);
break;
case 34: // Page Down
case 35: // End
ul.srSelectLi(ul.lastChild);
break;
}
}
//меняем класс элемента ul
//при наведении на него мышки
ul.onmouseover = function() { this.className += ' srHoverUl'; }
ul.onmouseout = function() { this.className = this.className.replace(/[\s]?srHoverUl/, ''); }
ul.srSelectLi = function(li)
{
var ul = li.parentNode;
//если уже есть выбранный элемент
//то назначаем снимаем выделение
if(ul.srSelectesIndex != null)
ul.childNodes[ul.srSelectesIndex].className = '';
//запоминаем индекс выбранного элемента
ul.srSelectesIndex = li.srIndex;
//устанавливаем для выбранного элемента
//класс srSelectedLi
ul.childNodes[li.srIndex].className = 'srSelectedLi';
return li.srIndex;
}
ul.srExpand = function()
{
if(!this.srExpanded)
{
if(document.srExpandedList)
document.srExpandedList.srCollapse();
document.srExpandedList = this;
//разворачиваем список
this.className = this.className.replace(/[\s]?srCollapsed/, ' srExpanded');
this.srExpanded = true;
//при раскрытии элемента передаем фокус
//соответствующему select
this.srSelect.focus();
//для особо одаренного браузера
//разворачиваем список особенным способом
if(ie6)
{
var node = this.firstChild;
var offset = 0;
var height = node.clientHeight;
while(node)
{
node.style.position = 'absolute';
node.style.top = offset;
offset += height;
node = node.nextSibling;
}
}
}
}
ul.srCollapse = function(li)
{
if(this.srExpanded)
{
document.srExpandedList = null;
//выбираем элемент списка на который кликнул пользователь
//и устанавливаем соответсвующий индекс выбранного элемента
//для спрятанного элемента select
if(li)
this.srSelect.selectedIndex = this.srSelectLi(li);
//при клике на элементы списка
//соответствующий спрятанный select
//теряет фокус нужно вернуть на место
this.srSelect.focus();
//сворачиваем список
this.className = this.className.replace(/[\s]?srExpanded/, ' srCollapsed');
this.srExpanded = false;
//для особо одаренного браузера
//сворачивам список особенным способом
if(ie6)
{
var node = this.firstChild;
while(node)
{
node.style.position = '';
node = node.nextSibling;
}
}
}
}
var options = sel.options;
var len = options.length;
for(var i = 0; i < len; i++)
{
//для каждого элемента option
//создаем соответствущий li
var li = document.createElement('li');
li.appendChild(document.createTextNode(options[i].text));
//в каждом элементе списка
//храним индекс соответствующего
//элемента option
li.srIndex = i;
//псевдо класс hover в IE работает только для ссылок
//поэтому будем менять класс при наведении мышки
li.onmouseover = function() { this.className += ' srHoverLi'; }
li.onmouseout = function() { this.className = this.className.replace(/[\s]?srHoverLi/, ''); }
ul.appendChild(li);
}
//если по умолчанию не выбран никакой элемент
//выбираем первый
if(sel.selectedIndex == null)
sel.selectedIndex = 0;
//устанавливаем элемент выбранный по умолчанию
ul.srSelectLi(ul.childNodes[sel.selectedIndex]);
//вставляем созданный список
//перед заменяемым select
sel.parentNode.insertBefore(ul, sel);
}
function srAddEvent(obj, type, fn)
{
// функция добавляет обработчик события
if (obj.addEventListener)
obj.addEventListener(type, fn, false);
else if (obj.attachEvent)
obj.attachEvent( "on"+type, fn );
}
function srOnDocumentClick(e)
{
var target = (window.event) ? window.event.srcElement : e.target;
if(document.srExpandedList)
{
//принадлежит ли соответствующий li списку заменителю select
if((target.srIndex || target.srIndex === 0)
//принадлежит ли наш li открытому в данный момент списку
&& document.srExpandedList == target.parentNode )
document.srExpandedList.srCollapse(target);
else
document.srExpandedList.srCollapse();
}
else
{
if(target.srIndex || target.srIndex === 0)
target.parentNode.srExpand();
}
}
function srReplaceSelects()
{
//заменяем все элементы select
var s = document.getElementsByTagName('select');
var len = s.length
for (var i = 0; i < len; i++)
rsSelectReplace(s[i]);
srAddEvent(document, 'click', srOnDocumentClick);
}
//при реальном применение желательно
//вызывать эту функцию сразу
//после загрузки DOM во многих фреймворках
//есть такая возможность, например, в jQuery
//это можно сделать так:
//$(document).ready(rsReplaceSelects);
srAddEvent(window, 'load', srReplaceSelects);
</script>
</head>
<body>
<form action="#" method="post">
<select id="something" name="something" tabindex="101" onMouseOver="srExpand();">
<option value="1">Вариант 1</option>
<option value="2">Вариант 2</option>
<option value="3">Вариант 3</option>
<option value="4">Вариант 4</option>
<option value="5" selected="selected">Вариант 5</option>
<option value="6">Вариант 6</option>
<option value="7">Вариант 7</option>
<option value="8">Вариант 8</option>
</select>
<select id="nothing" name="nothing" tabindex="103">
<option value="1">А Вариант 1</option>
<option value="2" selected="selected">Л Вариант 2</option>
<option value="3">Б Вариант 3</option>
<option value="4">Н Вариант 4</option>
<option value="5">З Вариант 5</option>
<option value="6">Е Вариант 6</option>
<option value="7">К Вариант 7</option>
<option value="8">В Вариант 8</option>
</select>
</form>
</body>
</html>
помогите поменять его
заранее спасибо