|
|
|
| Дано
<select multiple="multiple" size="20" id="select_id">
<option selected="selected" value="1">1</option>
<option selected="selected" value="2">2</option>
<option selected="selected" value="3">3</option>
</select>
|
Как средствами JS проверить есть ли например в списке select_id otion с value = 2 ? | |
|
|
|
|
|
|
|
для: Neokortex
(29.09.2010 в 13:24)
| | Пробежаться циклом по коллекции options и проверить значение каждого из элементов этой коллекции:
for (var j = 0, k = -1, obj = document.getElementById ('select_id').options; j < obj.length; j++)
if (obj [j].value == 2) {k = j; break}
alert ((k < 0) ? 'Опшена с value==2 НЕТ' : ('Опшен с индексом ' + k + ' имеет value==2'));
|
| |
|
|
|
|
|
|
|
для: АЯ
(29.09.2010 в 13:50)
| | Это кто же Вас научил в блоке объявления счётчика создавать несколько переменных? Зачем городить, где не надо? | |
|
|
|
|
|
|
|
для: bishake
(29.09.2010 в 14:28)
| | А действительно - вот зачем Вам "городить" здесь чушь?
Вы когда-то чего-то не понимаете/не знаете - Вы лучше спросите.
-----
Во-первых, оператор цикла не является "счётчиком". Оператор цикла может вовсе ничего "не считать".
Во-вторых, синтаксис оператора цикла не предусматривает какого-либо "блока объявления", Вами выдуманного. Первый операнд оператора for называется операндом инициализации. Содержит любое выражение(выражения), кое(кои) надо выполнить ОДИН РАЗ ДО ЗАПУСКА ЦИКЛА.
Я могу, если хорошо попросите, привести Вам примеры, когда оператор цикла, во-первых, совсем ничего не считает и, во-вторых, совершенно ничего не инициализирует.
Но... думаю, мне этого делать не придётся.
Ибо Вы уже "надули щёки" и будете продолжать демонстрировать всем здесь свою глупость... | |
|
|
|
|
|
|
|
для: АЯ
(29.09.2010 в 14:56)
| | Окей, первый операнд называется операндом инициализации (далее - ОИ) - это я поленился узнать. Тем не менее, я считаю, что не стоит на форуме демонстрировать всевозможные лазейки JavaScript'а, допустимые его синтаксисом.
Если бы я был новичком в JS, то посмотрев на Ваш пример, я бы решил, что переменные, используемые в теле цикла, всегда следует объявлять в выражении ОИ, и быть может, некоторое время городил бы очень длинные строки. Однако же, будучи достаточно искушенным в области программирования, я считаю, что в ОИ следует объявлять только одну переменную или выполнять любое другое одно присваивание / операцию, или же вообще опускать выражение ОИ (как Вы верно подметили).
Согласитесь, что данный пример выглядит гораздо понятнее:
var k = -1;
var obj = document.getElementById ('select_id').options;
for (var j = 0; j < obj.length; j++) {
...
}
|
| |
|
|
|
|
|
|
|
для: bishake
(29.09.2010 в 16:09)
| | Тем не менее, я считаю, что не стоит на форуме демонстрировать всевозможные лазейки JavaScript'а, допустимые его синтаксисом.
как раз наоборот, чтоб в случае чего, у вас вопров не возникало :)
в целом записи делать надо как удобнее
кстате, количество элементов в коллекции лучше отдельно записывать:
var k = -1;
var obj = document.getElementById ('select_id').options;
var iL = obj.length;
for (var j = 0; j < iL; j++) {
...
}
|
| |
|
|
|
|
|
|
|
для: Lelik
(29.09.2010 в 16:38)
| | С каждым проходом цикла будет просчитываться количество определяющее итерации цикла (не важно коллекция ли это элементов для JS, либо нечто в РНР), поэтому и затраты, а не потому, что for (var j = 0, k = -1; | |
|
|
|
|
|
|
|
для: sim5
(29.09.2010 в 16:46)
| | В конце каждой итерации просчитываться будет выражение, записанное в третьем операнде и затем проверяться условие, прописанное во втором операнде.
А вот первый операнд исполняется всего лишь ОДИН раз.
Поэтому в первом операнде можно написать.... хоть всю таблицу умножения (а также все таблицы Брадиса - если кто помнит, что это такое).
Соответственно, указанное выше соображение, что "длину коллекции лучше определить в переменной" - оно ВЕРНОЕ, ибо длина коллекции участвует в условии во втором операнде и всякий раз будет заново высчитываться. | |
|
|
|
|
|
|
|
для: АЯ
(29.09.2010 в 19:04)
| | А я что сказал? Именно о втором операнде влияющем на производительность цикла я и говорил. | |
|
|
|