jquery throws У объекта нет метода 'replace' в .animate - PullRequest
4 голосов
/ 19 января 2012

Использование jquery 1.7.1

Это простая функция, которую я пытаюсь запустить:

$('#large-boxes').dblclick(function(e){
  var element = $(e.target);

  boxes.disappear(element);
});

boxes = {
    disappear: function(element){
    console.log(element);
    element.animate({
        height: 0,
        width: 0,
        top: 0,
        left: 0
    }, 100);
},
}

который выводит это на консоль при запуске:

boxes.js:60

[
 <div id=​"4" class=​"ui-draggable">​</div>​
]

jquery.min.js:4

Uncaught TypeError: Object function () {
  var i;
  var newObj = (this instanceof Array) ? [] : {};
  for (i in this) {
    if (i == 'clone') continue;
    if (this[i] && typeof this[i] == "object") {
      newObj[i] = this[i].clone();
    } else newObj[i] = this[i]
  } return newObj;
} has no method 'replace'

Сначала я подумал, что квадратные скобки вокруг объекта-элемента могут указывать массив, но кажется, что это просто обозначение объекта jquery.

Элемент анимируется должным образом, и если я удаляю функцию .animate и просто устанавливаю все значения с помощью .css, я не получаю ошибки.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 28 января 2012

Позвольте мне сделать дикое предположение. Это:

Object function () {
   var i;
   var newObj = (this instanceof Array) ? [] : {};
   ......

может быть вашей собственной функцией, которая испортила пространство имен Object. IOW где-то в вашем исходный код, который вы делаете, например:

Object.prototype.myclone = function() { ... }

Теперь $ .fn.animate (prop, ...) подхватит это за цикл

for( p in prop ) { ....

потому что реквизит это просто обычный объект:

{   height: 0,  width: 0,   top: 0,   left: 0  }   

И с этого момента у вашего «миклона» своя собственная жизнь, и неудача, которую вы видите, может произойти намного позже. Лучший ответ, который я могу вам дать, это «grep newObj. *» Ваши исходные файлы и все ваши библиотеки. Просто дайте нам знать, если это стрельба по цели ...

1 голос
/ 19 января 2012

возможно, вам придется добавить $(element). Трудно сказать, как вы на самом деле вызываете эту функцию.

...