Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Скрипт отказывается работать в последней версии jQuery (https://javascript.ru/forum/jquery/50637-skript-otkazyvaetsya-rabotat-v-poslednejj-versii-jquery.html)

Fedul 05.10.2014 14:59

Скрипт отказывается работать в последней версии jQuery
 
Здравствуйте!
подскажите как поправить, имеем карусель, вот кусок кода
// navigation events
if( $p_nav.length ) {
	$p_nav.bind('click.gridnav', function( e ) {
		if( $wrapper.data( 'anim' ) ) return false;
		$wrapper.data( 'anim', true );
		nav[settings.type.mode].pagination( $wrapper, -1, settings );
		return false;
	});
}
if( $n_nav.length ) {
	$n_nav.bind('click.gridnav', function( e ) {
		if( $wrapper.data( 'anim' ) ) return false;
		$wrapper.data( 'anim', true );
		nav[settings.type.mode].pagination( $wrapper, 1, settings );
		return false;
	});
}


на старых версиях jquery (1.6-1.8.1) все работает как часы, а только подключаешь версию 1.11.1 то перестают работать кнопки вперед назад, выдает вот такую ошибку:
Uncaught Error: Syntax error, unrecognized expression: .tj_row_1
и скрипт не срабатывает.
помогите разобраться!

полный код можно посмотреть тут

krasovsky 06.10.2014 08:56

Вероятно ошибка в этом - 'click.gridnav'
http://api.jquery.com/bind/

danik.js 06.10.2014 09:58

krasovsky, зачем искать где-то в другом месте ошибку, если сама ошибка сообщает в чем проблема:
Цитата:

Uncaught Error: Syntax error, unrecognized expression: .tj_row_1,.tj_row_2,
И ведь правда, это некорректный css-селектор, из-за запятой на конце.

В коде есть такой фрагмент:
var currentRows	= '', nextRows = '';
					for( var i = 0; i < opts.rows; ++i ) {
						currentRows += '.tj_row_' + (config.currentRow + i) + ',';


Так вот, это неправильный подход. Надо складывать все в массив, а потом соединить его запятой: array.join(',')

Fedul 06.10.2014 22:17

а можно чуть подробнее как все это воплотить?

danik.js 07.10.2014 09:36

На примере этих двух строчек:
var currentRows = [], nextRows = '';
for( var i = 0; i < opts.rows; ++i ) {
    currentRows.push('.tj_row_' + (config.currentRow + i));
...

Потом, currentRows = currentRows.join(',')

Fedul 07.10.2014 19:26

danik.js спасибо!
все получилось

Fedul 02.11.2014 16:05

помогите разобраться до конца, скрипт прекрасно работает но ровно до того момента, пока не пытаешься вывести содержимое в два ряда
methods = {
	init 	: function( options ) {
	if( this.length ) {
		var settings = {
			rows	: 2,

код, прекрасно работающий при rows : 1, то есть передается нужное значение от первого массива ко второму, а необходимо передать от первого и второго ко второму и третьему
var currentRows = [], nextRows = '';
	for( var i = 0; i < opts.rows; ++i ) {
		currentRows.push('.tj_row_' + (config.currentRow + i));
		currentRows = currentRows.join(',');
						
		(dir === 1)
		? nextRows	+= '.tj_row_' + (config.currentRow + opts.rows + i) + ''
		: nextRows	+= '.tj_row_' + (config.currentRow - 1 - i) + '';
}

перестает работать, выдавая ошибку
Uncaught TypeError: undefined is not a function

и указывает на
currentRows.push('.tj_row_' + (config.currentRow + i));

как можно это поправить, подскажите?

danik.js 03.11.2014 06:34

Цитата:

Сообщение от Fedul
currentRows = currentRows.join(',');

Вот здесь в currentRows уже записывается строка, сформированная функцией join. На следующей итерации цикла возникает ошибка, ибо у строки нет метода push

Fedul 03.11.2014 09:07

в теории понимаю, но вот с воплощением в жизнь уже второй день ни как..
помогите еще раз пожалуйста

Fedul 07.11.2014 19:10

ну ни как не получается.
может кто нить все же поможет?


Часовой пояс GMT +3, время: 15:46.