Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.02.2014, 04:37   #1
Lokos
Форумчанин
 
Регистрация: 29.09.2009
Сообщений: 587
По умолчанию превышение параметров цикла

Здравствуйте. Опишу задачу.
Есть n количества ссылок n в интервале 0< n < 4 каждая ссылка имеет свой индикатор типа 'KN'+i, i от 1 до i<4 задача скрипта определить на какую ссылку нажали и отправить запрос

Код:
for (var j=1;j<4;j++)/*обработка нажатий кнопочек отдельных страниц*/
		{	console.log('j='+j);
			if($('#KN'+j).length) { var maslink=new Array(11);
									var	masstr=new Array(11);
									maslink[j] = document.getElementById('KN'+j);
									console.log('KN'+j+'='+maslink[j]);
									masstr[j]=maslink[j].getAttribute('href');//
									masstr[j]=masstr[j].substring(35,masstr[j].length);
									console.log(masstr[j]);
									maslink[j].onclick = function() {
									console.log('функция клика='+masstr[j]);
                                    $.ajax({  
											type: "POST",
											url: "getdata.php",  
											data:masstr[j]+'&'+filter,
											cache: false,  
											success: function(data){   
											$('#selector').html(data);
											console.log('кликнули 2 на KN'+j);
											/*MovePage(filter);*/
										}});
									console.log('кликнули на KN'+j);	
                                    return false;
																	}
								}
		}
лог консоли
j=1
KN1=ссылка целиком
PAGEN_1=2 -( строка которая передается в запросе)
j=2
KN2=ссылка целиком
PAGEN_1=3
j=3
KN3=ссылка целиком
PAGEN_1=52
функция клика=undefined (строка которая передается при нажатии на ссыль)
кликнули на KN4
кликнули 2 на KN4

вообщем каким то образом появляется 4 каким не могу понять, если цикл сдвинуть до большего числа то появляться будет оно, и соответственно нажатие не обрабатывается
Lokos вне форума Ответить с цитированием
Старый 21.02.2014, 06:29   #2
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Цитата:
вообщем каким то образом появляется 4 каким не могу понять
Lokos, познакомься, это - асинхронность. Асинхронность, это - Lokos.

Если тебе действительно нужно это мясо внутри (встречал, что новички чувствуют некую привязанность к своему странному коду), то просто заверни все тело цикла в
конструкцию
Код:
// твой фор
(function(j){
  // тело цикла
})(j);
// фор закрывается
Эта штука создает замыкание на при каждой итерации цикла, таким образом j становится локальной переменной для каждой итерации со своим собственным значением. В твоем случае для всего цикла она глобальна и на момент, когда нужно получить значение j, цикл закончен и оно максимально
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 21.02.2014, 06:49   #3
Lokos
Форумчанин
 
Регистрация: 29.09.2009
Сообщений: 587
По умолчанию

заработало. спс.
может подскажете более удачное решение чем странный код.
Lokos вне форума Ответить с цитированием
Старый 21.02.2014, 07:31   #4
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

что-то вроде:
Код:
$('a[id^=KN]').each(function(i){
    var $this = $(this);
    $this.click(function(){
        $.post(
            '/', 
            $this.attr('href').substring(35)+'&'+filter + '&' + 
            $.now(),
            function( data ){
                $('#selector').html(data);
                console.log('кликнули 2 на KN'+(i+1));
            }
        );
        return false;
    });
});
а то как-то неразумно юзать jQuery для одного только AJAX.

пс. Это маленькией кусок, странностей еще хватает, к примеру, зачем режется адрес ссылки с 35 символа? Зачем в каждой итерации создается массив из 11 пустых элементов?
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 21.02.2014, 07:34   #5
Lokos
Форумчанин
 
Регистрация: 29.09.2009
Сообщений: 587
Радость

массивы убрал вообще, режется чтоб получить необходимый параметр, вся ссылка не нужна.

Пойду изучать jQuery
Lokos вне форума Ответить с цитированием
Старый 24.02.2014, 14:14   #6
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Цитата:
Сообщение от Lokos Посмотреть сообщение
массивы убрал вообще, режется чтоб получить необходимый параметр, вся ссылка не нужна.

Пойду изучать jQuery
Отрезать ничего не нужно, все уже сделано за нас, смотрите как можно использовать ссылки и какие у них есть аттрибуты http://stackoverflow.com/questions/6...on-of-url-path
MaTBeu вне форума Ответить с цитированием
Старый 24.02.2014, 15:13   #7
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Цитата:
Сообщение от MaTBeu Посмотреть сообщение
Отрезать ничего не нужно, все уже сделано за нас, смотрите как можно использовать ссылки и какие у них есть аттрибуты http://stackoverflow.com/questions/6...on-of-url-path
поэтому и спрашивал насчет сабстринга) Вдруг там некий хитрый план)
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 25.02.2014, 06:31   #8
Lokos
Форумчанин
 
Регистрация: 29.09.2009
Сообщений: 587
По умолчанию

по поводу отрезать
можно использовать .search но останется знак ? который не нужен и его необходимо будет отсекать, так почему бы не отсечь то что нужно сразу.
P.S. может не до конца понял
Lokos вне форума Ответить с цитированием
Старый 25.02.2014, 07:09   #9
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Цитата:
Сообщение от Lokos Посмотреть сообщение
по поводу отрезать
можно использовать .search но останется знак ? который не нужен и его необходимо будет отсекать, так почему бы не отсечь то что нужно сразу.
P.S. может не до конца понял
При чем тут search? Матвей скинул пример как на ссылках работает location-API, который сам разбивает адрес на нужные куски.
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 25.02.2014, 12:56   #10
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Цитата:
Сообщение от Lokos Посмотреть сообщение
по поводу отрезать
можно использовать .search но останется знак ? который не нужен и его необходимо будет отсекать, так почему бы не отсечь то что нужно сразу.
P.S. может не до конца понял
Код:
window.location.search.split('?')[1]
Получаете кусок без ?

Код:
$this.attr('href').substring(35)
Такой код плох тем, что в нем присутствует так называемое "магическое число", и если у вас вдруг что-то изменится - ваш код перестанет работать. К примеру, вы делаете сайт, у вас тестовый сервер находится на www.testsite.com, а продакшн находится на www.site.com. Естественно, вы будете отрезать 35 символов в своем коде и он будет работать на тестовом сервере, но когда вы захотите перенести это на живой сайт - получите неработающую логику.

Последний раз редактировалось MaTBeu; 25.02.2014 в 12:59.
MaTBeu вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Организация программ с использованием процедур .использованием параметров-значений и параметров переменных Фрейтор 40-500 Помощь студентам 0 02.11.2012 21:58
Организация программ с использованием процедур .использованием параметров-значений и параметров переменных Фрейтор 40-500 Помощь студентам 6 02.11.2012 21:46
алгоритмы нахождения эйлерова цикла и гамильтонова цикла в графе. Necare Помощь студентам 0 15.11.2011 18:26
превышение максимально допустимого потребления процессорного времени jsutwhite PHP 3 13.10.2011 10:09
Переход от цикла к циклу не выходя из цикла (без multithreading) Qousio Общие вопросы C/C++ 2 16.05.2009 09:27