Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.04.2015, 22:15
Новичок на форуме
Отправить личное сообщение для MilkeyWay Посмотреть профиль Найти все сообщения от MilkeyWay
 
Регистрация: 03.04.2015
Сообщений: 5

Связанные опции-опенкарт-скрипт(хелп)
Здравствуйте!
Сильно не пинайте,если то не так,я тут новичок.
Помогите решить проблему:
есть связанные опции,допустим,цвет и размер,вот когда страница загрузилась,стоит checked на первое значение у цвета и размера,а если кликнуть по цвету,то checked слетает у размера,хотелось бы,чтобы у размера выбиралось первое доступное значение,в картинках думаю будет понятно:

это когда страница загрузилась только:



это,если кликнуть по верхним опциям:



помогите,пожалуйста,сделат ь,чтобы у нижних опций ставился checked у первой доступной опции

скрипт большой,выложил кусок,который,по-моему нужн оправить,если не так,тогда выложу весь скрипт,дайте знать,если непройдете мимо решите помочь


function get_options_values(options_keys) {
						var options_values = {};
						
						for (var i=0;i<$("select[name^=option]").length;i++) {
						
							option_id = parseInt( $("select[name^=option]")[i].name.substr(7,$("select[name^=option]")[i].name.length-8) );
							if ($.inArray(option_id,variant_product_options) != -1) {
								options_values[option_id] = $("select[name^=option]")[i].value;
								options_keys.push(option_id);
							}
						}
						
						// сначала все радио
						for (var i=0;i<$("input[type=radio][name^=option]").length;i++) {
						
							option_id = parseInt( $("input[type=radio][name^=option]")[i].name.substr(7,$("input[type=radio][name^=option]")[i].name.length-8) );
							if ($.inArray(option_id,variant_product_options) != -1) {
								$('.option label').removeClass('checked');
								options_values[option_id] = 0;
								if ($.inArray(option_id,options_keys) == -1) {
									options_keys.push(option_id);
								}
							}
						}
						
						// затем только выбранные
						for (var i=0;i<$("input[type=radio][name^=option]:checked").length;i++) {
							option_id = parseInt( $("input[type=radio][name^=option]:checked")[i].name.substr(7,$("input[type=radio][name^=option]:checked")[i].name.length-8) );
							if ($.inArray(option_id,variant_product_options) != -1) {
								options_values[option_id] = $("input[type=radio][name^=option]:checked")[i].value;
				
								$("label[for=option-value-"+options_values[option_id]+"]").attr('class','checked');
								
							}
						}
						
						return options_values;
						
					}
					
					// автовыбор корректных начальных значений опций, если уже выбраны какие-то значения
					function use_first_values(set_anyway) {
						
						var options_values = get_options_values([]);
						
						var has_selected = false;
						for (var optkey in options_values) {
							if (options_values[optkey]) {
								has_selected = true;
								break;
							}
						}
						
						if ((has_selected || set_anyway) && ro_array && Object.keys(ro_array).length > 0) {
							ro_key = Object.keys(ro_array)[0];
							setSelectedRO(ro_key);
						}
						
					}
					
					function setSelectedRO(ro_key) {
					
						if (ro_array && ro_array[ro_key]) {
							
							var last_opt_id = "";
							for (var opt_id in ro_array[ro_key]) {
								
								if ($('select[name=option\\['+opt_id+'\\]]').length > 0) {
									$('[name=option\\['+opt_id+'\\]]').val(ro_array[ro_key][opt_id]);
								} else if ($('input[type=radio][name=option\\['+opt_id+'\\]]').length > 0) {
									$('input[type=radio][name=option\\['+opt_id+'\\]][value='+ro_array[ro_key][opt_id]+']').prop('checked', true);
									
								}
								
								last_opt_id = opt_id;
							}
							
							if (last_opt_id != "") {
								if ($('select[name=option\\['+last_opt_id+'\\]]').length > 0) {
									$('[name=option\\['+last_opt_id+'\\]]').change();
								} else if ($('input[type=radio][name=option\\['+last_opt_id+'\\]]').length > 0) {
									$('input[type=radio][name=option\\['+last_opt_id+'\\]][value='+ro_array[ro_key][last_opt_id]+']').change();
									
								}
							}
							
						}
						set_block_options();
						set_journal2_options();
					}
					
					
					// для пошагового варианта
					function get_options_steps() {
						
						var options_steps = [];
						var product_option_id = "";
						
						for (var i=0;i<$('[name^=option\\[]').length;i++) {
							
							product_option_id = $('[name^=option\\[]')[i].name.substr(7, $('[name^=option\\[]')[i].name.length-8);
							if (!isNaN(product_option_id)) product_option_id = parseInt(product_option_id);
							if ($.inArray(product_option_id, variant_product_options) != -1) {
								if ($.inArray(product_option_id, options_steps) == -1) {
									options_steps.push(product_option_id);
									
								}
							}
						}
						
						return options_steps;
						
					}
					
					function options_values_access() {

						if (!ro_array) return;
						
						if (ro_step_by_step) {
						
							var options_steps = get_options_steps();
							var prev_options_values = {};
							var prev_options = [];
							
							for (var i=0;i<options_steps.length;i++) {
								if (i>0) {
									if (prev_options[i-1]) {
										// ограничения по предыдущим
										option_values_access(prev_options_values, options_steps[i]);
									} else {
										// откл все
										set_accessible_values(options_steps[i], []);
									}
								}
								prev_options.push( ($('input[type=radio][name=option\\['+options_steps[i]+'\\]]:checked').val() || $('select[name=option\\['+options_steps[i]+'\\]]').val()) );
								prev_options_values[options_steps[i]] = prev_options[prev_options.length-1];
							}
							
						} else {
						
							var options_keys = [];
							var options_values = get_options_values(options_keys);
							
							for (var i=0;i<options_keys.length;i++) {
								option_values_access(options_values, options_keys[i]);
								
							}
							
						}
						
						stock_control(0);
						
						<?php
						if (isset($ro_settings['spec_model']) && $ro_settings['spec_model']) {
						?>
						set_model();
						<?php
						}
						?>
						
						check_block_options();
						
					}

Последний раз редактировалось MilkeyWay, 03.04.2015 в 22:18.
Ответить с цитированием
  #2 (permalink)  
Старый 03.04.2015, 23:09
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

MilkeyWay,
пока мысли вслух -- несовсем понятна связь между
Сообщение от MilkeyWay
цвет и размер
если смотреть по вашим картинкам кода должно быть пара строк - ктож будет изучать вашу cms где эта пара строк превратилась в целую страницу.
Ответить с цитированием
  #3 (permalink)  
Старый 04.04.2015, 02:49
Новичок на форуме
Отправить личное сообщение для MilkeyWay Посмотреть профиль Найти все сообщения от MilkeyWay
 
Регистрация: 03.04.2015
Сообщений: 5

Сообщение от рони Посмотреть сообщение
MilkeyWay,
пока мысли вслух -- несовсем понятна связь между
если смотреть по вашим картинкам кода должно быть пара строк - ктож будет изучать вашу cms где эта пара строк превратилась в целую страницу.
всмысле насчет связи?

код отвечает за множество настроек и вывода...

через alert выводил значения и выяснил,что данные о нижних опциях содержаться в функции где комментарий:пошаговый выбор,тут вроде как:

for (var i=0;i<options_steps.length;i++) {
								if (i>0) {
									if (prev_options[i-1]) {
										// ограничения по предыдущим
										option_values_access(prev_options_values, options_steps[i]);
									} else {
										// откл все
										set_accessible_values(options_steps[i], []);
									}
								}
								prev_options.push( ($('input[type=radio][name=option\\['+options_steps[i]+'\\]]:checked').val() || $('select[name=option\\['+options_steps[i]+'\\]]').val()) );
								prev_options_values[options_steps[i]] = prev_options[prev_options.length-1];
							}


а вот как поставить checked на первую доступную опцию у нижних опций-не могу,т.к не силен в этом деле,надеюсь на вашу помощь и понимание...
Ответить с цитированием
Ответ



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

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