Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.08.2009, 20:11
Аспирант
Отправить личное сообщение для Beck Посмотреть профиль Найти все сообщения от Beck
 
Регистрация: 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] для оформления листингов кода в теле сообщения.
Ответить с цитированием
  #2 (permalink)  
Старый 08.08.2009, 23:08
Аспирант
Отправить личное сообщение для Beck Посмотреть профиль Найти все сообщения от Beck
 
Регистрация: 08.08.2009
Сообщений: 95

Спасибо, не знал, что такая опция у вас есть.

Скажите хотябы, если проблема не в многомерных массивах.

Вроде синтаксис правильный, раз Firebug не ругается.

Может порядок действий где-то нарушен?
Ответить с цитированием
  #3 (permalink)  
Старый 08.08.2009, 23:10
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

Попробуйте сначала генерировать html код в строковую переменную, а потом уже вставлять её в документ.
Причина может быть в этом.
Ответить с цитированием
  #4 (permalink)  
Старый 09.08.2009, 00:02
Аспирант
Отправить личное сообщение для Beck Посмотреть профиль Найти все сообщения от Beck
 
Регистрация: 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('');
Ответить с цитированием
  #5 (permalink)  
Старый 10.08.2009, 00:24
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

а если внутри function () { ... } вставить alert(1); окно не появляется в ie?

а ie ошибки показывает (иконка в строке состояния, возможно нужно отладчик для этого включить в настройках)?

вообще-то должно работать, дай ссылку на страницу или прикрепи ее к сообщению
Ответить с цитированием
  #6 (permalink)  
Старый 10.08.2009, 01:28
Аспирант
Отправить личное сообщение для Beck Посмотреть профиль Найти все сообщения от Beck
 
Регистрация: 08.08.2009
Сообщений: 95

Решил проблему через hover, не знаю почему, но в IE и Хроме какой-то баг, если прикрепить к select опциям click эвент.
Ответить с цитированием
  #7 (permalink)  
Старый 10.08.2009, 01:35
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

а что требуется? отреагировать на изменение состояния select? Тогда лучше на select повесить onchange
Ответить с цитированием
  #8 (permalink)  
Старый 10.08.2009, 01:35
Аспирант
Отправить личное сообщение для Beck Посмотреть профиль Найти все сообщения от Beck
 
Регистрация: 08.08.2009
Сообщений: 95

И еще одна вещь. Как сделать так, чтобы определенная переменная перепроверяла себя, допустим каждую секунду, на изменения внесенные в DOM?


Да я весь код переписал заного. Уже не знаю, если честно.


Могу выложить, если интересно, но у меня еще одна вещь не до конца работает.

Там третья категория не становится пустой, если во второй выбрали пустую ячейку.



Насчет переменной:

У меня там переменная содержит селектор cat1.find('option:selected').attr('value');

Так вот его очень часто надо обновлять, что не очень удобно.

Есть какие советы?

Заранее спасибо.

Последний раз редактировалось Beck, 10.08.2009 в 01:42.
Ответить с цитированием
  #9 (permalink)  
Старый 10.08.2009, 02:02
Аспирант
Отправить личное сообщение для Beck Посмотреть профиль Найти все сообщения от Beck
 
Регистрация: 08.08.2009
Сообщений: 95

О господи, истина была рядом. Как только вы мне напомнили про onchange.
Я сразу вспомнил об change(fn)

Мда....

Надо получше ознакомится с документацией... :|

Но вопрос об var current_cat1 = cat1.find('option:selected').attr('value'); всё еще остается открытым.

Последний раз редактировалось Beck, 10.08.2009 в 02:05.
Ответить с цитированием
  #10 (permalink)  
Старый 10.08.2009, 05:35
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от Beck
И еще одна вещь. Как сделать так, чтобы определенная переменная перепроверяла себя, допустим каждую секунду, на изменения внесенные в DOM?
зачем?

Сообщение от Beck
Могу выложить, если интересно, но у меня еще одна вещь не до конца работает.
если честно, то неинтересно, но могу помочь

Сообщение от Beck
Там третья категория не становится пустой, если во второй выбрали пустую ячейку
дай ссылку или прикрепи страничку к сообщению

Сообщение от Beck
У меня там переменная содержит селектор cat1.find('option:selected').attr('value');

Так вот его очень часто надо обновлять, что не очень удобно.

Есть какие советы?
есть, не обновлять: получать значение только тогда, когда нужно
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Блок переключения меню на JS, два скрипта в одном файле Dizeloid Элементы интерфейса 0 30.07.2009 12:03
как прекратить выполнение скрипта ? kefi Общие вопросы Javascript 3 31.03.2009 19:05
Привязка картинки к углу ячейки таблицы! Помогите с кодом! Alexofer Общие вопросы Javascript 6 31.12.2008 00:14
Помогите разобраться с логикой поведения скрипта MarkupDeveloper jQuery 3 21.06.2008 18:04