Цвет выделения в select multiple
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Цвет выделения в select multiple Expand / Collapse
Автор
Сообщение
28.11.2006 12:43
Forum Guru

Forum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum Guru

участник
Last Login: 24.01.2008 14:59
Сообщ.: 68, Visits: 545
Вопрос: как поменять цвет выделения в select'е с стандартного темно-синего на другой?
Сообщ. #908112
28.11.2006 15:24
Forum Guru

Forum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum Guru

участник
Last Login: 24.01.2008 14:59
Сообщ.: 68, Visits: 545
пробовал

option:focus{
background-color:#00FF00;
}

не получилось(
Сообщ. #908120
28.11.2006 16:31
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 25.04.2007 11:57
Сообщ.: 77, Visits: 97
Чесно говоря никогда не встречал возможности сменить цвет выделения, нигде. Даже в самой винде сменить этот цвет вроде нельзя. Хотя это и странно.

Если возможность изменить это какой то опцией есть было бы тоже интересно ее узнать.

Ну а если делать через функции то нужно:

http://msdn2.microsoft.com/en-us/library/ms536969.aspx

http://msdn2.microsoft.com/en-us/library/ms536967.aspx 

это о том как перехватывать действие селекта. Дальше берем и то что выделено селектим:

http://msdn2.microsoft.com/en-us/library/ms536735.aspx 

а потом до кучи хайлайтим по своему, учитывая системный селект.

Способ конечно сложный, даже не знаю стоит ли овчинка выделки.

Сообщ. #908125
29.11.2006 12:53
Forum Guru

Forum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum Guru

участник
Last Login: 24.01.2008 14:59
Сообщ.: 68, Visits: 545
Так вот меня и интересует каким образом хайлайтить.
Все остальное работает, т.е. я перехватываю событие onfocus, и получаю индекс элемента.
Сообщ. #908166
29.11.2006 13:15
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 25.04.2007 11:57
Сообщ.: 77, Visits: 97
попробуй применить фильтр, либо

object.style.filter="invert()" - инвертирует цвета, либо

object.style.filter="mask(color=green)" - параметр - цвет фона, цвет текста станет белым.

А, ну да, я понял проблему, ты наверное не метод хайлайта не знаешь а как его применить :)

Значит нужно на он клик селекта поставить скрипт которые сначала отменит все предыдущие хайлайты, то есть если ты используешь фильтр как я выше написал то ко всем вложенным елементам применить object.style.filter="none". Дальше надо нужный нам елемент отхайлайтить.

Возникает вопрос - как это все сделать? И тут нам поможет то что селект по своей сути является массивом содержащим группу опшнов. Обращение:

selectName.elements[i] - получаем объект елементов. Соответственно описанная словами выше функция будет иметь вид:

function sselect(index) //переменная - номер выделенного опшна
{
 for (var i=selectName.elements.length-1; i>0; i--) //идем по всем опшнам селекта, с конца в начало
 {
  selectName.elements[i].style.filter="none"; //отменяем фильтр который был
  if (i==index) //если текущий елемент - тот что мы должны выделить то
  {
   selectName.elements[i].style.filter="mask(color=green)" //выделяем фильтром
  }
 }
}

Сообщ. #908170
29.11.2006 16:12
Forum Guru

Forum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum Guru

участник
Last Login: 24.01.2008 14:59
Сообщ.: 68, Visits: 545
не получается.
я поменял elements на options так как совсем ничего не работало.

и в style жестко пробовал прописать - не получилось.

option class="ch_" style="filter:mask(color=green)"

даже в хинтах не нашел filter.
Сообщ. #908181
29.11.2006 18:11
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 25.04.2007 11:57
Сообщ.: 77, Visits: 97
да, не elements я описался - не туда глянул в доке ) но и не item а options

ДЕйствительно фильтры не применяются ни к селекту вцелом ни к опшнам в частности, но в принципе я посмотрел - опшну можно поставить стиль цвета и фона отдельно от других опшнов.

Вот, скрипт выделяет то что нам надо нужным бекграундом, при желании в строку можно добавить любое выделение стилями. Единственное чего не хаватает - не убирается системное выделение, потому все зря :). Не знаю пока как системное выделение убрать.

function sselect(j) //переменная - номер выделенного опшна
{
for (var i=(window.document.getElementById("sel").options.length-1); i>=0; i--) //идем по всем опшнам
 {
  window.document.getElementById("sel").options[i].style.cssText="background-color:inherit"; //убираем стиль фона который был
  if (i==j) //если тот елемент что выбран
  {
   window.document.getElementById("sel").options[i].style.cssText="background-color:red"; //то ставим наш фон
  }
 }
}

sel - ID нашего селекта

Сообщ. #908205
29.11.2006 18:44
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 25.04.2007 11:57
Сообщ.: 77, Visits: 97
Я его сделал! )

function sselect(j) //переменная - номер выделенного опшна
{
window.document.getElementById("sel").selectedIndex=-1; //отменяет системное выделение - для системы больше нет выделенных елементов!
for (var i=(window.document.getElementById("sel").options.length-1); i>=0; i--) //идем по всем опшнам
 {
  window.document.getElementById("sel").options[i].style.cssText="background-color:inherit"; //убираем стиль фона который был
  if (i==j) //если тот елемент что выбран
  {
   window.document.getElementById("sel").options[i].style.cssText="background-color:red"; //то ставим наш фон
  }
 }
}

Правда на какую то долю секунды системное выделение все равно проскакивает ). Главное - не забыть что после этих манипуляций для системы выделенных елементов больше нет, так что если ты попробуешь отправить данные формы не обработав выделение вручную то от селекта этого ничего не пошлется.

Сообщ. #908207
30.11.2006 11:28