JQuery Animate () проблема (синтаксис?) - PullRequest
0 голосов
/ 26 апреля 2010
$('#somediv').stop(false, true)
             .animate({marginLeft: '-=' + e.width() + 'px'}, options.speed, function(){ options.onNewSlide() })
  • e.with() возвращает 640
  • options.speed содержит 800
  • options.onNewSlide() содержит пользовательскую функцию обратного вызова

Отлично работает в Firefox. Но я отлаживал его с помощью jQuery-Lint, потому что в IE возникала какая-то случайная ошибка. Линт говорит мне:

When I called animate(...) with your args, an error was thrown! TypeError: c.speed is not a function { message="c.speed is not a function",  more...}
You passed:  [Object {  marginLeft="-=640px"}, 800, function()]

и это указывает мне на строку, которую я отправил. Я проверил документацию по jQuery, но мой синтаксис выглядит нормально.

Вы знаете, что я делаю неправильно?

PS: я использую jQuery 1.4.2 из API Google, вы можете увидеть ошибку здесь: http://meodai.ch/slider/ (я знаю, что код находится в стадии разработки, но все еще)

редактирование: Я попытался воспроизвести мою ошибку в новом файле только с анимацией: http://meodai.ch/slider/index2.html там она работает очень хорошо! Теперь я потерялся.

Ответы [ 3 ]

2 голосов
/ 27 апреля 2010

В вашем коде у вас есть:

options = $.extend(defaultOptions, options)

Если options равно undefined, это расширяет объект jQuery со свойствами defaultOptions.

Внутри defaultOptions находятся свойства speed и easing, которые перезаписывают внутренние свойства jQuery с одинаковыми именами, вызывая ошибку.

Более безопасный способ объединить defaultOptions и options:

options = $.extend({}, defaultOptions, options);
0 голосов
/ 26 апреля 2010

Я сделал объект options для своих параметров. внутри объекта option у меня были speed: и easing:, как только я переименовал эти опции, моя проблема была решена. Но как получается, что у меня нет такой же проблемы на другой моей тестовой странице?

0 голосов
/ 26 апреля 2010

Одна вещь, которую я вижу, это то, что вы не указываете функцию замедления для использования. Попробуйте

$('#somediv')
  .stop(false, true)
  .animate({marginLeft: '-=' + e.width() + 'px'}, 
    options.speed, 
    'linear',
    function(){ options.onNewSlide() })
...