@amazinginternetsites

Как правильно оформить js, отвечающего за выпадающие списки?

Здравствуйте, друзья.

Суть вопроса такова:
1. Возможно ли оптимизировать код?
2. Каким образом прописать зависимость показа определенного value относящегося к одному списку от value другого?

А вот сам скрипт. Все бы ничего, но таких зависимостей огромная куча.
$(document).ready(function(){
		$('#f_lr1rowtd option:selected').each(function () {
			if($(this).val() == '1') {
				$('#f_lr1rooq').hide();
				$('#f_lr1ronq').hide();
			}
			else if($(this).val() == '2') {
				$('#f_lr1rooq').hide();
				$('#f_lr1ronq').hide();
			}
			else if($(this).val() == '3') {
				$('#f_lr1rooq').show();
				$('#f_lr1ronq').hide();
			}
			else if($(this).val() == '4') {
				$('#f_lr1rooq').show();
				$('#f_lr1ronq').hide();
			}
			else if($(this).val() == '5') {
				$('#f_lr1rooq').show();
				$('#f_lr1ronq').hide();
			}
			else if($(this).val() == '6') {
				$('#f_lr1rooq').show();
				$('#f_lr1ronq').hide();
			}
			else if($(this).val() == '7') {
				$('#f_lr1rooq').show();
				$('#f_lr1ronq').hide();
			}
			else if($(this).val() == '8') {
				$('#f_lr1rooq').show();
				$('#f_lr1ronq').hide();
			}
			else if($(this).val() == '9') {
				$('#f_lr1rooq').hide();
				$('#f_lr1ronq').show();
			}
			else if($(this).val() == '10') {
				$('#f_lr1rooq').hide();
				$('#f_lr1ronq').show();
			}
			else if($(this).val() == '11') {
				$('#f_lr1rooq').hide();
				$('#f_lr1ronq').show();
			}else if($(this).val() == '12') {
				$('#f_lr1rooq').hide();
				$('#f_lr1ronq').show();
			}
		});
	});
	
	$('#f_lr1rowtd').change(function () {
		$('#f_lr1rowtd option:selected').each(function () {
			if($(this).val() == '1') {
				$('#f_lr1rooq').hide();
				$('#f_lr1ronq').hide();
			}
			else if($(this).val() == '2') {
				$('#f_lr1rooq').hide();
				$('#f_lr1ronq').hide();
			}
			else if($(this).val() == '3') {
				$('#f_lr1rooq').show();
				$('#f_lr1ronq').hide();
			}
			else if($(this).val() == '4') {
				$('#f_lr1rooq').show();
				$('#f_lr1ronq').hide();
			}
			else if($(this).val() == '5') {
				$('#f_lr1rooq').show();
				$('#f_lr1ronq').hide();
			}
			else if($(this).val() == '6') {
				$('#f_lr1rooq').show();
				$('#f_lr1ronq').hide();
			}
			else if($(this).val() == '7') {
				$('#f_lr1rooq').show();
				$('#f_lr1ronq').hide();
			}
			else if($(this).val() == '8') {
				$('#f_lr1rooq').show();
				$('#f_lr1ronq').hide();
			}
			else if($(this).val() == '9') {
				$('#f_lr1rooq').hide();
				$('#f_lr1ronq').show();
			}
			else if($(this).val() == '10') {
				$('#f_lr1rooq').hide();
				$('#f_lr1ronq').show();
			}
			else if($(this).val() == '11') {
				$('#f_lr1rooq').hide();
				$('#f_lr1ronq').show();
			}else if($(this).val() == '12') {
				$('#f_lr1rooq').hide();
				$('#f_lr1ronq').show();
			}


Спасибо.
  • Вопрос задан
  • 188 просмотров
Решения вопроса 1
standy
@standy
Как минимум можно не искать каждый раз $(this).val()

Насколько я понял по коду, тут участвуют всего два элемента, поэтому просто опишите когда показывается один, и когда второй.
var val = +$(this).val(); // значения ведь числа?

// массивы подставьте свои
var showFirst = [1, 4, 6, 7].indexOf(val) >= 0; 
var showSecond = [2, 3, 4, 8].indexOf(val) >= 0;
$('#f_lr1rooq').toggle(showFirst);
$('#f_lr1ronq').toggle(showSecond);


upd:
Собственно в этом тоже никакого смысла
$('#f_lr1rowtd option:selected').each(function () { ... }

Можно убрать, и сделать так:
var val = +$('#f_lr1rowtd option:selected').val();
// дальше логика выше
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы