|
|
|
| Вот код, который делает видимыми только те чекбоксы, группа которых была выбрана в предыдущем чекбоксе.
Проблема в том, когда выбираешь чекбокс, нажимаешь SUBMIT и переходишь на другую страницу, а потом переходишь назад, то значение зависимого (2-го) чекбокса обнуляется... Как это исправить?
function synccat_ings()
{}
synccat_ings.prototype.sync = function()
{
for (var i = 0; i < arguments.length - 1; i++)
document.getElementById(arguments[i]).onchange = (function (o, id1, id2) { return function() { o._sync(id1, id2); }; }) (this, arguments[i], arguments[i+1]);
document.getElementById(arguments[0]).onchange();
}
synccat_ings.prototype._sync = function (firstSelectId, secondSelectId)
{
var firstSelect = document.getElementById(firstSelectId);
var secondSelect = document.getElementById(secondSelectId);
secondSelect.length = 0;
if (firstSelect.length > 0)
{
var optionData = this.datacat_ings[firstSelect.options[firstSelect.selectedIndex == -1 ? 0 : firstSelect.selectedIndex].value];
for (var key in optionData || null)
secondSelect.options[secondSelect.length] = new Option(optionData[key], key);
if (firstSelect.selectedIndex == -1)
setTimeout( function(){ firstSelect.options[0].selected = true;}, 1 );
if (secondSelect.length>0)
setTimeout( function(){ secondSelect.options[0].selected = true;}, 1 );
}
secondSelect.onchange && secondSelect.onchange();
};
// это начало кода 2-го чекбокса
var comand = new synccat_ings;
comand.datacat_ings =
{
'0': {'0':'-- Ингредиент --'},
'1': {'1':'-- Яблоки --'}, // ...
|
Если нужно, выложу структуру Чекбоксов (но это очень много).
Заранее спасибо. | |
|
|
|
|
|
|
|
для: lElectroHardl
(22.09.2010 в 22:02)
| | Что-то у Вас явно перепутано.
"Чекбоксы", о которых Вы пишете, это русифицированное название тегов <input type="checkbox">
В выложенном Вами скрипте описываются действия с тегами <select>, которые по-русски обычно называются "списками" (реже - "комбобоксами").
Кроме того, пишете Вы о "видимости" этих самых "чекбоксов", а в скрипте речь идёт об "отмеченности" ("выборе") пунктов "списка".
Так что определитесь - "кто на ком стоял?" и, по-любому, дайте кусочек HTML-кода, чтобы было понятно - о чём все-таки идёт речь... | |
|
|
|
|
|
|
|
для: АЯ
(23.09.2010 в 05:02)
| | Ой... Наверно пересидел перед компом немного.
Да, конечно, речь идет о SELECT`ах..
<select name='sub_cat_ing[0]' size='1' id='cat_ings00'></select>
<script type="text/javascript">
var comand = new synccat_ings;
comand.datacat_ings =
{
'0': {'0':'-- Ингредиент --'},
'1': {'0':'-- Ингредиент --',
'10':'Лимон (г./кг.,шт.)','8':'Клубника (г./кг.,шт.)','89':'Бананы (г./кг.,шт.)', },
'2': {'0':'-- Ингредиент --',
'68':'Бульон (г./кг.,стакан.)','4':'Тесто (г./кг.,)', },
}; // это второй селект, таких много
comand.sync("cat_ings000", "cat_ings00");
|
| |
|
|
|
|
|
|
|
для: lElectroHardl
(22.09.2010 в 22:02)
| | Кто-то знает, как это сделать? | |
|
|
|
|
|
|
|
для: lElectroHardl
(23.09.2010 в 16:11)
| | Можно сказать следующее: в разных браузерах дело обстоит по-разному.
Например, при проверке нижеследующего простейшего кода
<form name="frm" action="http://google.com/" method="post">
<select name="slc">
<option>1111111111111</option>
<option>2222222222222</option>
<option>3333333333333</option>
<option>4444444444444</option>
<option>5555555555555</option>
</select>
<script>
document.forms.frm.slc.options[1].selected = true;
</script>
<input type="submit">
</form>
| выяснилось, что браузеры MSIE, FF, Opera при возврате на страницу формы сохраняют выбор клиента (т. е. не исполняют скрипт). А браузер GChrome - скрипт исполняет и устанавливает selectedIndex = 1
У Вас же ситуация сложнее - и сами опшены создаются скриптом, и установка selectedIndex происходит с таймаутом. Что там у Вас получается в разных браузерах - не знаю. Полагаю, что в каком-либо браузере скрипт исполнится...
В общем, совет таков - на кнопку сабмита Вам следует "повесить" функцию, коя будет записывать в куках выбор клиента по схеме: имя_селекта_1=его_selectedIndex;имя_селекта_2=его_selectedIndex;..
Кукам этим следует дать минимальное "время жизни" - три-пять минут.
Соответственно, в самом начале скрипта, создающих списки, Вам следует прочитать куки и, если они есть на браузере клиента, скриптом восстановить выбор клиента. | |
|
|
|
|
|
|
|
для: АЯ
(23.09.2010 в 17:05)
| | А есть ли другой, менее велосипедостроительный вариант?
Может скрипт другой или доработка основного скрипта?...
А то JS в принципе для меня темный лес. | |
|
|
|
|
|
|
|
для: lElectroHardl
(23.09.2010 в 19:12)
| | Вариант есть - исключить скрипт из исходника.
Если сделаете все Ваши селекты на чистом HTML, то никаких проблем с сохранением выбора клиента при возврате не будет. | |
|
|
|
|
|
|
|
для: АЯ
(24.09.2010 в 00:43)
| | Изначально так и было, но для удобства желательно разделять результаты на 2 селекта, т.к. в 1 селекте будет более 300 option`ов, а таких селектов будет 20 штук. В каждом селекте найти что-то будет очень трудно. | |
|
|
|