Сразу скажу писал скрипт быстро, и только для определенных целей, так что сказать что он универсальный незя, поэтому те кто реально нуждается, рад буду помочь. Да и народ подрубится, поможет мош..
Просьба, мне вообще пофиг на плагиаторов, даже наооборот, берите - пользуйте, вот только если обгрейдживаете, его до лучшего состояния, то просьба выложить его на этот форум, имхо чтоб люди тоже смотрели и пользовались лучшей версией ,)
Вот код
CODE
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Select</title>
<script type="text/javascript">
var selects = [];
onload = function() {
filter(document.getElementById("sel1"), selects);
}
function filter(sel) {
var val = sel.options[sel.selectedIndex].value;
if (selects[sel] == undefined) selects[sel] = [];
switch (val) {
case '2': disable(["sel2", "sel3"], sel);
break;
case '13': disable(["sel3"], sel);
break;
default : enabled(sel);
}
}
function disable(ids, sel) {
enabled(sel);
for (var i=0; i<ids.length; i++) {
var id = ids[i];
var seldisbl = document.getElementById(id);
if (seldisbl != null) {
var selbool = true;
for (var ii=0; ii<selects[sel].length; ii++) {
if (selects[sel][ii] == id) selbool = false;
}
if (selbool) selects[sel][selects[sel].length] = id;
seldisbl.disabled = true;
}
}
}
function enabled(sel) {
for (var i=0; i<selects[sel].length; i++) {
var selenbl = document.getElementById(selects[sel][i]);
selenbl.disabled = false;
}
}
</script>
</head>
<body>
<select onChange="filter(this)" onKeyUp="filter(this)" id="sel1">
<option value="3">s1op1</option>
<option value="2">s1op2</option>
<option value="13">s1op3</option>
<option value="1">s1op4</option>
</select>
<select id="sel2">
<option>s2op1</option>
<option>s2op2</option>
<option>s2op3</option>
<option>s2op4</option>
</select>
<select id="sel3">
<option>s2op1</option>
<option>s2op2</option>
<option>s2op3</option>
<option>s2op4</option>
</select>
</div>
</body>
</html>
Теперь рассмотрим поподробнее.
Начинается все после события onChange="filter(this)", или onKeyUp="filter(this)" (онкейап нужен для лисы, она неотлавливает ончендж, когда листаеш селект стрелкой на клаве)
Вот.. рассмотрим первую ф-ю function filter(sel)
CODE
function filter(sel) {
var val = sel.options[sel.selectedIndex].value;
if (selects[sel] == undefined) selects[sel] = [];
switch (val) {
case '2': disable(["dvig", "vozr"], sel);
break;
case '13': disable(["dvig"], sel);
break;
default : enabled(sel);
}
}
sel - в качестве параметра принимает объект селекта.
val - это ничто иное как валуе (значение, но не текст) селекта sel
selects - конечно плохой тон, но эта глобальная переменная, нужна для хранения в качестве асоциативного массива все айдишники селектов, которые должны быть задизеблины или наоборот при значении этого селекта
if (selects[sel] == undefined) selects[sel] = [];
если такого ключа как этот селект не существует, тогда создаем его
switch (val) тестим значение на нужные нам
если такаво найдено, то вызываем дизабл функцию по задизебливанию иных селектов - disable(ids, sel)**
если нуного значения нет, то раздизеблим все связанные с этим селектом селекты - default : enabled(sel);****
CODE
function disable(ids, sel) {
enabled(sel);
for (var i=0; i<ids.length; i++) {
var id = ids[i];
var seldisbl = document.getElementById(id);
if (seldisbl != null) {
var selbool = true;
for (var ii=0; ii<selects[sel].length; ii++) {
if (selects[sel][ii] == id) selbool = false;
}
if (selbool) selects[sel][selects[sel].length] = id;
seldisbl.disabled = true;
}
}
}
ids - массив айдишников, объекты которых будут задизаблины
sel - объект селекта иницировавшего событие
enabled(sel)**** для начала раздезеблим все селекты которые связаны с этим селектом.
дальше цикл который проходит по всем айдишникам for (var i=0; i<ids.length; i++)
..и если объект с этим айдишником существует if (seldisbl != null) {, то идет проверка на существование записи этого айди в массиве с ключом sel:
if (selects[sel][ii] == id) selbool = false;
если такого нет, что подозревается по умолчанию selbool = true;
, то оно присваевается ,) (глобально сложная логика, правда ?)))) )
if (selbool) selects[sel][selects[sel].length] = id;
И наконец объект этого айдишника дизеблится
seldisbl.disabled = true;
****enabled(sel)
CODE
function enabled(sel) {
for (var i=0; i<selects[sel].length; i++) {
var selenbl = document.getElementById(selects[sel][i]);
selenbl.disabled = false;
}
}
Принимает в качестве аргумента объект селекта иницировший событие sel,
дальше проходим по всем объектам с айдишниками в массиве под ключом этого селекта selects[sel][i] и раздизебливаем их
Вот так вот все просто - конечно тут много нехватает, но поверьте мне этого для поставлиных целей хватило, поэтому еще раз напоминаю, кто хочет пусть продолжит данную тему, а решение найдем вместе, если такова будет необходимость ))