08.08.2009, 20:11
|
Аспирант
|
|
Регистрация: 08.08.2009
Сообщений: 95
|
|
Помогите выявить проблему скрипта
Написал тут скрипт для выбора категорий, работает в Firefox и Опере, но отказывается работать в IE6,7 и в Google Chrome.
Firebug ошибок не показывает.
Данные вытаскиваются из многомерных массивов.
Прогонял переменные по console.log(); , всё выводит.
Заранее огромное спасибо! Я только новичек, так что сильно не пинайте.
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();});
}
Последний раз редактировалось Андрей Параничев, 08.08.2009 в 22:34.
Причина: Пользуйтесь bb-кодами [js] и [html] для оформления листингов кода в теле сообщения.
|
|
08.08.2009, 23:08
|
Аспирант
|
|
Регистрация: 08.08.2009
Сообщений: 95
|
|
Спасибо, не знал, что такая опция у вас есть.
Скажите хотябы, если проблема не в многомерных массивах.
Вроде синтаксис правильный, раз Firebug не ругается.
Может порядок действий где-то нарушен?
|
|
08.08.2009, 23:10
|
|
|
Регистрация: 21.02.2008
Сообщений: 1,250
|
|
Попробуйте сначала генерировать html код в строковую переменную, а потом уже вставлять её в документ.
Причина может быть в этом.
|
|
09.08.2009, 00:02
|
Аспирант
|
|
Регистрация: 08.08.2009
Сообщений: 95
|
|
Не помогло. Я проверил, выводы опций идут нормально, только не работают две вещи почему-то.
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('');
|
|
10.08.2009, 00:24
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
а если внутри function () { ... } вставить alert(1); окно не появляется в ie?
а ie ошибки показывает (иконка в строке состояния, возможно нужно отладчик для этого включить в настройках)?
вообще-то должно работать, дай ссылку на страницу или прикрепи ее к сообщению
|
|
10.08.2009, 01:28
|
Аспирант
|
|
Регистрация: 08.08.2009
Сообщений: 95
|
|
Решил проблему через hover, не знаю почему, но в IE и Хроме какой-то баг, если прикрепить к select опциям click эвент.
|
|
10.08.2009, 01:35
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
а что требуется? отреагировать на изменение состояния select? Тогда лучше на select повесить onchange
|
|
10.08.2009, 01:35
|
Аспирант
|
|
Регистрация: 08.08.2009
Сообщений: 95
|
|
И еще одна вещь. Как сделать так, чтобы определенная переменная перепроверяла себя, допустим каждую секунду, на изменения внесенные в DOM?
Да я весь код переписал заного. Уже не знаю, если честно.
Могу выложить, если интересно, но у меня еще одна вещь не до конца работает.
Там третья категория не становится пустой, если во второй выбрали пустую ячейку.
Насчет переменной:
У меня там переменная содержит селектор cat1.find('option:selected').attr('value');
Так вот его очень часто надо обновлять, что не очень удобно.
Есть какие советы?
Заранее спасибо.
Последний раз редактировалось Beck, 10.08.2009 в 01:42.
|
|
10.08.2009, 02:02
|
Аспирант
|
|
Регистрация: 08.08.2009
Сообщений: 95
|
|
О господи, истина была рядом. Как только вы мне напомнили про onchange.
Я сразу вспомнил об change(fn)
Мда....
Надо получше ознакомится с документацией... :|
Но вопрос об var current_cat1 = cat1.find('option:selected').attr('value'); всё еще остается открытым.
Последний раз редактировалось Beck, 10.08.2009 в 02:05.
|
|
10.08.2009, 05:35
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
Сообщение от Beck
|
И еще одна вещь. Как сделать так, чтобы определенная переменная перепроверяла себя, допустим каждую секунду, на изменения внесенные в DOM?
|
зачем?
Сообщение от Beck
|
Могу выложить, если интересно, но у меня еще одна вещь не до конца работает.
|
если честно, то неинтересно, но могу помочь
Сообщение от Beck
|
Там третья категория не становится пустой, если во второй выбрали пустую ячейку
|
дай ссылку или прикрепи страничку к сообщению
Сообщение от Beck
|
У меня там переменная содержит селектор cat1.find('option:selected').attr('value');
Так вот его очень часто надо обновлять, что не очень удобно.
Есть какие советы?
|
есть, не обновлять: получать значение только тогда, когда нужно
|
|
|
|