//////////////////////////////////////////////////////////////////////////////// // Отображение полного значения специальности (главная + подкатегория). // UPD: Отображение региона со сдвигом влево // Настройка // - создать объект SpecFull, параметры: // имя формы (по умолчанию - search); // имя select-а (по умолчанию - spec) // пример: var specfull = new SpecFull('add', 'spec_list'); // - выполнить инициализацию: // specfull.sethandler(); // specfull.start(); //////////////////////////////////////////////////////////////////////////////// function SpecFull (f, s) { this.f = f || 'search'; this.s = s || 'spec'; this.action = 0; this.origname = ""; with (this) { this.sethandler = function() { document[f][s].onchange = function () { makeact(1); }; document[f][s].onclick = function () { makeact(2); }; document[f][s].onblur = function () { makeact(3); }; }; this.start = function () { makeact(4); }; } } SpecFull.prototype.makeact = function (act) { var s = document[this.f][this.s]; if (!s || s == null) return; var i = s.selectedIndex; if (act == 1) { this.doneact(1, i); } else if (act == 2) { if (this.action == 1) { this.action = 0; return; } if (this.action == 2) { this.doneact(0, i); return; } this.action = 2; if (this.origname && this.origname != "") s.options[i].text = this.origname; } else if (act == 3) { if (this.action == 2) { this.doneact(0, i); } } else if (act == 4) { this.doneact(0, i); } } SpecFull.prototype.doneact = function (a, i) { var s = document[this.f][this.s]; this.action = a; this.origname = s.options[i].text; if (this.s == "spec") { s.options[i].text = fspec(i, s, this.origname); } else if (this.s == "city") { s.options[i].text = do_trim(s.options[i]); } } function do_trim(o) { var re = /\xA0/g; var text = o.text; return text.replace(re, ""); } // Формирование полного spec function fspec(i, s, name) { if ( !name.match(/^(\s|\xA0){3,}/) ) return name; var full = ""; // вверх по списку for (var y = i-1; y >= 0; y--) { full = s.options[y].text; if ( !full.match(/^(\s|\xA0){3,}/) ) break; else full = ""; } if (full && full != "") { name = name.replace(/^(\s|\xA0)+|\s+$/g, ''); full = full.replace(/^(\s|\xA0)+|\s+$/g, ''); return full + ": " + name; } else { return name; } }