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


Автор: fath_fast 9.10.2009, 00:33
Доброго времени суток!
   Ребят, проблема вот в чём:
есть форма с несколькими элементами:
1) Календарь (textbox)
2) selectbox 
Затея такая: как только в календаре выбирается какая-нибудь дата, идёт ajax -запрос и в зависимости от результата, некоторые options в selectbox-e темнеют, т.е. приобретают аттрибут 
Код

   style="background: gray;"

 Так вот в фаерфоксе и IE 6 работает безотказно следующий код:
Код

   jQuery("select#time_since option[value='"+i+"']").attr("style", "background: gray;");  

 А в опере 10 никак не хочет. Причём:
Код

     alert(jQuery("select#time_since option[value='"+i+"']").val());  

  - отображает правильное значение элемента.
Что кто может подсказать?

Автор: EmilRegis 9.10.2009, 06:31
а так не получится?
Код

$("select#time_since option[value='"+i+"']").css( "background", "gray"); 

Автор: fath_fast 9.10.2009, 10:38
EmilRegis, тоже не хочет :(
 причём уже попробовал вот так :
Код

      document.getElementById("time_since").options[1].setAttribute('style', "background: black;");

 Везде работает кроме Oper-ы.

Автор: Itsys 10.10.2009, 10:17
Ну тогда только так:
Код

<style>
option.norm {
    background-color: #FFF
}
option.grey {
    background-color: grey
}
</style>
</head>

<body>

<form method="POST" action="#">
<select size="1" name="D1" id="sel">
    <option class="grey">Один</option>
    <option>Два</option>
    <option>Три</option>
    <option class="grey">Четыре</option>
    </select><input type="button" value="Отправить" name="B1" onclick="alert(document.getElementById('sel').options[1].className);document.getElementById('sel').options[1].className = 'grey';"></p>
</form>

Автор: IDVsbruck 10.10.2009, 12:32
Цитата(fath_fast @  9.10.2009,  00:33 Найти цитируемый пост)
jQuery("select#time_since option[value='"+i+"']").attr("style", "background: gray;");

Что это за дикость???
Странно, что где-то это работает ... видать, простая случайность и излишняя гибкость языка.
Код

jQuery("#time_since option[value='" + i  + "']").css("background-color", "gray");

Автор: Itsys 12.10.2009, 22:42
IDVsbruck, так тоже не работает... я пробовал и через DOM менять - опера ни в какую не хочет менять отображение option, хотя при попытке повторной установке свойства - показывает, что это свойство уже установлено, и, даже конвертит "grey"  в "#808080".

Автор: fath_fast 13.10.2009, 12:49
IDVsbruck, ваш код в Опере тоже не работает, сколь он правильным бы Вам не казался :(

Автор: IDVsbruck 13.10.2009, 15:17
Оки, возможно. Есть несколько способов описать стили. Еще вот так:
Код

jQuery("#time_since option[value='" + i  + "']").css({backgroundColor:"#808080"});

Под оперу никогда не подстраивался и не тестирую, так как не рассматриваю как возможный клиентский брузер под проекты. А предложенные варианты, в принципе, универсальны, описаны документацией. Все остальное - проблемы браузера.

Автор: Itsys 13.10.2009, 22:55
fath_fast, чего, мой вариант со сменой класса не работает? Я его проверил - все ОК

Автор: IDVsbruck 14.10.2009, 22:56
Это
Код

jQuery("select#time_since option[value='"+i+"']").attr("style", "background: gray;");

смена класса? smile smile smile

Идея, конечно, хороша. Лучше, чем менять стили, но реализация ужасна ... читать доку очень полезно:
Код

.new_class {background-color: #808080;}
$("select#time_since option[value='" + i + "']").attr("className", "new_class");

или
Код

$("select#time_since option[value='" + i + "']").addClass("new_class");

Автор: Itsys 16.10.2009, 06:22
я не  использую jQuery  smile 

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