Помогите выявить проблему скрипта
Написал тут скрипт для выбора категорий, работает в Firefox и Опере, но отказывается работать в IE6,7 и в Google Chrome.
Firebug ошибок не показывает. Данные вытаскиваются из многомерных массивов. Прогонял переменные по console.log(); , всё выводит. Заранее огромное спасибо! Я только новичек, так что сильно не пинайте. :D var current_cat1 = 'null1'; var current_cat2 = 'null2'; var current_cat3 = 'null3'; function call_cats() { fill_cat1(); fill_cat2(); fill_cat3(); } function fill_cat1() { $('#cat1').html(''); var selected = ''; var cat1 = $('#cat1'); cat1.prepend('<option id="null1" value="null1"></option>'); var i = 0; while(i <= main_cats['main_cat_rows'] - 1) { if(current_cat1 == 'null1') { $('#null1', cat1).remove(); cat1.prepend('<option id="null1" value="null1" selected></option>'); current_cat2 = 'null2';current_cat3 = 'null3'; } if(current_cat1 == i){var selected = 'selected'; cat1.append('<option ' + selected + ' value="' + i + '">' + main_cats['main_cat'][i] + '</option>'); i++; } cat1.append('<option value="' + i + '">' + main_cats['main_cat'][i] + '</option>'); i++; } $('#cat1 option').bind("click", function(){current_cat1 = $(this).attr('value'); call_cats();}); } function fill_cat2() { $('#cat2').html(''); var selected = ''; var cat2 = $('#cat2'); cat2.prepend('<option id="null2" value="null2"></option>'); var i = 0; while(i <= sub_cats['list_rows'][current_cat1] - 1) { if(current_cat2 == 'null2') { $('#null2', cat2).remove(); cat2.prepend('<option id="null2" value="null2" selected></option>'); current_cat3 = 'null3'; } if(current_cat2 == i){var selected = 'selected'; cat2.append('<option ' + selected + ' value="' + i + '">' + sub_cats['list_all'][current_cat1][i] + '</option>'); i++; } cat2.append('<option value="' + i + '">' + sub_cats['list_all'][current_cat1][i] + '</option>'); i++; } $('#cat2 option').bind("click", function(){current_cat2 = $(this).attr('value'); call_cats();}); } function fill_cat3() { $('#cat3').html(''); var selected = ''; var cat3 = $('#cat3'); cat3.prepend('<option id="null3" value="null3"></option>'); var i = 0; while(i <= sub_cats['list_sub_rows'][current_cat2] - 1) { if(current_cat3 == 'null3') {$('#null3', cat3).remove();cat3.prepend('<option id="null3" value="null3" selected></option>');} if(current_cat3 == i){var selected = 'selected'; cat3.append('<option ' + selected + ' value="' + i + '">' + sub_cats['sub_list'][current_cat1][current_cat2][i] + '</option>'); i++; } cat3.append('<option value="' + i + '">' + sub_cats['sub_list'][current_cat1][current_cat2][i] + '</option>'); i++; } $('#cat3 option').bind("click", function(){current_cat3 = $(this).attr('value'); call_cats();}); } |
Спасибо, не знал, что такая опция у вас есть.
Скажите хотябы, если проблема не в многомерных массивах. Вроде синтаксис правильный, раз Firebug не ругается. Может порядок действий где-то нарушен? |
Попробуйте сначала генерировать html код в строковую переменную, а потом уже вставлять её в документ.
Причина может быть в этом. |
Не помогло. Я проверил, выводы опций идут нормально, только не работают две вещи почему-то.
1 - реакции на эти строки в IE6 & IE7 и Chrome полный ноль: $('#cat1 option').bind("click", function(){current_cat1 = $(this).attr('value'); call_cats();}); $('#cat2 option').bind("click", function(){current_cat2 = $(this).attr('value'); call_cats();}); $('#cat3 option').bind("click", function(){current_cat3 = $(this).attr('value'); call_cats();}); 2 - на эти строки IE6 & IE7 и Chrome почему-то тоже никак не реагируют: $('#cat2').html(''); $('#cat3').html(''); |
а если внутри function () { ... } вставить alert(1); окно не появляется в ie?
а ie ошибки показывает (иконка в строке состояния, возможно нужно отладчик для этого включить в настройках)? вообще-то должно работать, дай ссылку на страницу или прикрепи ее к сообщению |
Решил проблему через hover, не знаю почему, но в IE и Хроме какой-то баг, если прикрепить к select опциям click эвент.
|
а что требуется? отреагировать на изменение состояния select? Тогда лучше на select повесить onchange
|
И еще одна вещь. Как сделать так, чтобы определенная переменная перепроверяла себя, допустим каждую секунду, на изменения внесенные в DOM?
Да я весь код переписал заного. Уже не знаю, если честно. :) Могу выложить, если интересно, но у меня еще одна вещь не до конца работает. Там третья категория не становится пустой, если во второй выбрали пустую ячейку. Насчет переменной: У меня там переменная содержит селектор cat1.find('option:selected').attr('value'); Так вот его очень часто надо обновлять, что не очень удобно. Есть какие советы? Заранее спасибо. |
О господи, истина была рядом. Как только вы мне напомнили про onchange.
Я сразу вспомнил об change(fn) Мда.... Надо получше ознакомится с документацией... :| Но вопрос об var current_cat1 = cat1.find('option:selected').attr('value'); всё еще остается открытым. :) |
Цитата:
Цитата:
Цитата:
Цитата:
|
Часовой пояс GMT +3, время: 02:06. |