Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как проверить существует ли <option>
 
 автор: Neokortex   (29.09.2010 в 13:24)   письмо автору
 
 

Дано

<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 ?

  Ответить  
 
 автор: АЯ   (29.09.2010 в 13:50)   письмо автору
 
   для: 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'));

  Ответить  
 
 автор: bishake   (29.09.2010 в 14:28)   письмо автору
 
   для: АЯ   (29.09.2010 в 13:50)
 

Это кто же Вас научил в блоке объявления счётчика создавать несколько переменных? Зачем городить, где не надо?

  Ответить  
 
 автор: АЯ   (29.09.2010 в 14:56)   письмо автору
 
   для: bishake   (29.09.2010 в 14:28)
 

А действительно - вот зачем Вам "городить" здесь чушь?
Вы когда-то чего-то не понимаете/не знаете - Вы лучше спросите.
-----

Во-первых, оператор цикла не является "счётчиком". Оператор цикла может вовсе ничего "не считать".

Во-вторых, синтаксис оператора цикла не предусматривает какого-либо "блока объявления", Вами выдуманного. Первый операнд оператора for называется операндом инициализации. Содержит любое выражение(выражения), кое(кои) надо выполнить ОДИН РАЗ ДО ЗАПУСКА ЦИКЛА.

Я могу, если хорошо попросите, привести Вам примеры, когда оператор цикла, во-первых, совсем ничего не считает и, во-вторых, совершенно ничего не инициализирует.

Но... думаю, мне этого делать не придётся.
Ибо Вы уже "надули щёки" и будете продолжать демонстрировать всем здесь свою глупость...

  Ответить  
 
 автор: bishake   (29.09.2010 в 16:09)   письмо автору
 
   для: АЯ   (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++) {
   ...
}

  Ответить  
 
 автор: Lelik   (29.09.2010 в 16:38)   письмо автору
 
   для: 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++) {
   ...
}

  Ответить  
 
 автор: sim5   (29.09.2010 в 16:46)   письмо автору
 
   для: Lelik   (29.09.2010 в 16:38)
 

С каждым проходом цикла будет просчитываться количество определяющее итерации цикла (не важно коллекция ли это элементов для JS, либо нечто в РНР), поэтому и затраты, а не потому, что for (var j = 0, k = -1;

  Ответить  
 
 автор: АЯ   (29.09.2010 в 19:04)   письмо автору
 
   для: sim5   (29.09.2010 в 16:46)
 

В конце каждой итерации просчитываться будет выражение, записанное в третьем операнде и затем проверяться условие, прописанное во втором операнде.
А вот первый операнд исполняется всего лишь ОДИН раз.

Поэтому в первом операнде можно написать.... хоть всю таблицу умножения (а также все таблицы Брадиса - если кто помнит, что это такое).

Соответственно, указанное выше соображение, что "длину коллекции лучше определить в переменной" - оно ВЕРНОЕ, ибо длина коллекции участвует в условии во втором операнде и всякий раз будет заново высчитываться.

  Ответить  
 
 автор: sim5   (29.09.2010 в 19:55)   письмо автору
 
   для: АЯ   (29.09.2010 в 19:04)
 

А я что сказал? Именно о втором операнде влияющем на производительность цикла я и говорил.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования