Javascript.RU

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

непонятный код
Всем доброго времени суток, помогите разобраться с кодом, короче при нажатии на чекбокс данные отправляются на сервер, и возвращаются ответ от сервера, если сделать тоже самое только с тегом селект ничего не работает, вот пример кода:
<input
type="checkbox"
value="<?echo $ar["HTML_VALUE"]?>"
name="<?echo $ar["CONTROL_NAME"]?>"
id="<?echo $ar["CONTROL_ID"]?>"
<?echo $ar["CHECKED"]? 'checked="checked"': ''?>
onclick="smartFilter.click(this)"
/><label for="<?echo $ar["CONTROL_ID"]?>"><?echo $ar["VALUE"];?></label>


вот таких чекбоксов несколько отличаются названиями и id
, при нажатии на чекбокс выполняется
onclick="smartFilter.click(this)"

var smartFilter = new JCSmartFilter('/catalog/elektro-instrument/dreli_shurupoverty/?arrFilter_P3_MIN=980.00&arrFilter_P3_MAX=65968.00&set_filter=&arrFilter_148_743589328=Y');


это данные в параметре из строки браузера среди них данные из чекбокса

Далее код вообще непонятен , и как это заменить чтобы работы с селектом


function JCSmartFilter(ajaxURL)
{
	this.ajaxURL = ajaxURL;
	this.form = null;
	this.timer = null;
}

JCSmartFilter.prototype.keyup = function(input)
{
	if(this.timer)
		clearTimeout(this.timer);
	this.timer = setTimeout(BX.delegate(function(){
		this.reload(input);
	}, this), 1000);
}

JCSmartFilter.prototype.click = function(checkbox)
{
	if(this.timer)
		clearTimeout(this.timer);
	this.timer = setTimeout(BX.delegate(function(){
		this.reload(checkbox);
	}, this), 1000);
}

JCSmartFilter.prototype.reload = function(input)
{
	this.position = BX.pos(input, true);
	this.form = BX.findParent(input, {'tag':'form'});
	if(this.form)
	{
		var values = new Array;
		values[0] = {name: 'ajax', value: 'y'};
		this.gatherInputsValues(values, BX.findChildren(this.form, {'tag':'input'}, true));
		BX.ajax.loadJSON(
			this.ajaxURL,
			this.values2post(values),
			BX.delegate(this.postHandler, this)
		);
	}
}

JCSmartFilter.prototype.postHandler = function (result)
{
	if(result.ITEMS)
	{
		for(var PID in result.ITEMS)
		{
			var arItem = result.ITEMS[PID];
			if(arItem.PROPERTY_TYPE == 'N' || arItem.PRICE)
			{
			}
			else if(arItem.VALUES)
			{
				for(var i in arItem.VALUES)
				{
					var ar = arItem.VALUES[i];
					var control = BX(ar.CONTROL_ID);
					if(control)
					{
						control.parentNode.className = ar.DISABLED? 'lvl2 lvl2_disabled': 'lvl2';
					}
				}
			}
		}
		var modef = BX('modef');
		var modef_num = BX('modef_num');
		if(modef && modef_num)
		{
			modef_num.innerHTML = result.ELEMENT_COUNT;
			var hrefFILTER = BX.findChildren(modef, {tag: 'A'}, true);
			if(result.FILTER_URL && hrefFILTER)
				hrefFILTER[0].href = BX.util.htmlspecialcharsback(result.FILTER_URL);
			if(modef.style.display == 'none')
				modef.style.display = 'block';
			modef.style.top = this.position.top + 'px';
		}
	}
}

JCSmartFilter.prototype.gatherInputsValues = function (values, elements)
{
	if(elements)
	{
		for(var i = 0; i < elements.length; i++)
		{
			var el = elements[i];
			if (el.disabled || !el.type)
				continue;

			switch(el.type.toLowerCase())
			{
				case 'text':
				case 'textarea':
				case 'password':
				case 'hidden':
				case 'select-one':
					if(el.value.length)
						values[values.length] = {name : el.name, value : el.value};
					break;
				case 'radio':
				case 'checkbox':
					if(el.checked)
						values[values.length] = {name : el.name, value : el.value};
					break;
				case 'select-multiple':
					for (var j = 0; j < el.options.length; j++)
					{
						if (el.options[j].selected)
							values[values.length] = {name : el.name, value : el.options[j].value};
					}
					break;
				default:
					break;
			}
		}
	}
}

JCSmartFilter.prototype.values2post = function (values)
{
	var post = new Array;
	var current = post;
	var i = 0;
	while(i < values.length)
	{
		var p = values[i].name.indexOf('[');
		if(p == -1)
		{
			current[values[i].name] = values[i].value;
			current = post;
			i++;
		}
		else
		{
			var name = values[i].name.substring(0, p);
			var rest = values[i].name.substring(p+1);
			if(!current[name])
				current[name] = new Array;

			var pp = rest.indexOf(']');
			if(pp == -1)
			{
				//Error - not balanced brackets
				current = post;
				i++;
			}
			else if(pp == 0)
			{
				//No index specified - so take the next integer
				current = current[name];
				values[i].name = '' + current.length;
			}
			else
			{
				//Now index name becomes and name and we go deeper into the array
				current = current[name];
				values[i].name = rest.substring(0, pp) + rest.substring(pp+1);
			}
		}
	}
	
	
	return post;
}
Ответить с цитированием
  #2 (permalink)  
Старый 09.12.2012, 23:13
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

откройте для себя https://getfirebug.com/
а простыни, подобные, мало кто будет читать
Ответить с цитированием
  #3 (permalink)  
Старый 15.12.2014, 17:30
Интересующийся
Отправить личное сообщение для GTAlex Посмотреть профиль Найти все сообщения от GTAlex
 
Регистрация: 09.07.2012
Сообщений: 28

Сообщение от dmitriymar Посмотреть сообщение
откройте для себя https://getfirebug.com/
а простыни, подобные, мало кто будет читать
Извините за вторжение, файербаг стоит давно, а вот Яваскрипт как им отлаживать то ?
Ответить с цитированием
  #4 (permalink)  
Старый 16.12.2014, 08:42
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

GTAlex,
Попробуем погуглить?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как можно улучшить такой код? Reiter Общие вопросы Javascript 0 06.11.2012 16:19
Требуется выводить код рекламного блока Adsense из файла JavaScript??? speedflow Элементы интерфейса 0 26.05.2012 15:50
Получить код js-скрипта, находящегося в файле на сервере RomanA Общие вопросы Javascript 4 04.04.2012 09:53
Как писать код который легко поддерживать, расширять, читать. Policeman Общие вопросы Javascript 3 24.03.2012 05:40
код нe работает в фаирфохе dadli Javascript под браузер 2 28.01.2012 21:18