Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Передать название параметра через переменную
 
 автор: tima2010   (14.10.2013 в 15:10)   письмо автору
 
 

Добрый день,
пытаюсь передать параметр через переменную, но почему то не работает. Что я делаю не правильно?

Пример кода который анимацией меняет положение абсолютного блока. В переменную передается название параметра, например: left или top


    $('.block').hover( function() {
    
        name_param     = $(this).data('param');
        
        $(this).animate({
            name_param: '0px'
        }, 500 );
        
    }, function() {
    
        $(this).animate({
            name_param: '-100px'
        }, 500 );
        
    });

  Ответить  
 
 автор: confirm   (14.10.2013 в 20:46)   письмо автору
 
   для: tima2010   (14.10.2013 в 15:10)
 

Если вы используете объект data источника, то зачем переменная?
$('.block').hover( function() { 
     
        $(this).animate({ 
             $(this).data('param'): '0px' 
        }, 500 ); 
         
    }, function() { 
     
        $(this).animate({ 
             $(this).data('param'): '-100px' 
        }, 500 ); 
         
    });

  Ответить  
 
 автор: tima2010   (14.10.2013 в 20:58)   письмо автору
 
   для: confirm   (14.10.2013 в 20:46)
 

Спасибо за ответ, но при вашем варианте получают ошибку в консоли: Uncaught SyntaxError: Unexpected token this

Использование переменной мешает работе?
Использовал переменную для удобства и сокращения кода. Чтобы не писать $(this)......

просто переменная указанная в свойство не преобразуется в top или left когда я ее подставляю

видимо нельзя передать название свойства?

  Ответить  
 
 автор: tima2010   (14.10.2013 в 21:32)   письмо автору
 
   для: tima2010   (14.10.2013 в 20:58)
 

нашел ответ. тут http://javascript.ru/tutorial/object/intro#dobavlenie-svoystv

Есть два синтаксиса добавления свойств в объект. Первый - точка, второй - квадратные скобки:

// эквивалентные записи
o.test = 5
o["test"] = 5
Квадратные скобки используются в основном, когда название свойства находится в переменной:

var name = 'test'
o[name] = 5
Здесь имя свойства "test" является ключом в ассоциативном массиве, по которому лежит значение 5.

  Ответить  
 
 автор: confirm   (14.10.2013 в 21:47)   письмо автору
 
   для: tima2010   (14.10.2013 в 21:32)
 

Это я знаю. Но что вы хотите сделать? Если то, что я спрашивал ниже, то то что вы сейчас цитируете, нужно использовать не так.

  Ответить  
 
 автор: confirm   (14.10.2013 в 21:45)   письмо автору
 
   для: tima2010   (14.10.2013 в 20:58)
 

Это потому что я ошибку допустил, хотел как надо, а получилось как всегда. )
Это потому, что именем переменной пытаются переопределить имя объекта (в параметре анимации). То же самое вы пытаетесь сделать и с помощью переменной. А должно быть так:

$('.block').data({p:60});
$('.block').hover( function() { 
    $(this).animate({
            top: $(this).data('p') 
    }, 500 ); 
         
}


Вы хотите написать один обработчик, а ему передавать куда уже его сдвигать?

  Ответить  
 
 автор: tima2010   (14.10.2013 в 21:51)   письмо автору
 
   для: confirm   (14.10.2013 в 21:45)
 

Да, верно, один обработчик чтобы не писать длинные условия
if(name_param == 'left')
{

}.....
>> то то что вы сейчас цитируете, нужно использовать не так.

сейчас мой код выглядит так:


   $('.block').hover( function() { 
        n_p         = $(this).data('param'); 
        o_p         = new Object();
        o_p[n_p]     = '0px';
        $(this).animate(o_p, 500 ); 
         
    }, function() { 
        o_p[n_p]     = '-100px';
        $(this).animate(o_p, 500 ); 
    }); 

  Ответить  
 
 автор: confirm   (14.10.2013 в 22:20)   письмо автору
 
   для: tima2010   (14.10.2013 в 21:51)
 

Значит вы поступаете не правильно, это надо писать по иному - писать свою функцию передавая ей аргументы. Почитайте как в jQuery можно добавить свои объекты - $.extend(), посмотрите как пишутся плагины.
А объявить объект проще так - obj = {name : var}

  Ответить  
 
 автор: tima2010   (14.10.2013 в 23:07)   письмо автору
 
   для: confirm   (14.10.2013 в 22:20)
 

Вы имеете ввиду что то вроде этого?


$.fn.my_animate = function() {
    var make = function() {
        n_p         = $(this).data('param');  
        o_p         = {
            begin: {},
            end: {}
        }; 
        o_p.begin[n_p] = '0px';
        o_p.end[n_p]     = '-100px';
            
        $(this).hover( function() {   
            $(this).animate(o_p.begin, 500 );  
        }, function() {  
            $(this).animate(o_p.end, 500 );  
        });
    };

    return $(this).each(make); 
}

а для чего использовать extend?

Не могли бы вы объяснить чем плох этот вариант решения?


$('.block').hover( function() {  
    n_p         = $(this).data('param');  
    o_p         = {
        begin: {},
        end: {}
    }; 
    o_p.begin[n_p] = '0px';
    o_p.end[n_p]     = '-100px';
    $(this).animate(o_p.begin, 500 );  
}, function() {  
    $(this).animate(o_p.end, 500 );  
});  

Ведь он работает у любого объекта которому я присвою класс block.
Я делаю не правильно с точки зрения решения или с точки зрения правил?

заранее спасибо!

  Ответить  
 
 автор: confirm   (14.10.2013 в 23:14)   письмо автору
 
   для: tima2010   (14.10.2013 в 23:07)
 

Я имею ввиду "да", но совсем не так как как вы пишите. Польза будет тогда, когда переданы аргументы, при этом некоторые могут быть по умолчанию.

Мне просто сейчас некогда писать много, но поищите в сети что-то типа "как написать свой jquery плагин, добавить свой метод...". Можете быть уверены, что это будет полезно.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования