jquery throws对象在.animate上没有方法'replace'

时间:2012-01-19 03:41:20

标签: jquery jquery-animate

使用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 个答案:

答案 0 :(得分:1)

您可能需要添加$(element)。但是很难说你是如​​何实际调用这个函数的。

答案 1 :(得分:1)

让我做一个狂野的猜测。 即:

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

可能是您自己的函数,它已经破坏了Object的命名空间。在你的某个地方 你正在做的源代码:

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

现在$ .fn.animate(prop,...)会在for循环

中选择它
for( p in prop ) { ....

因为prop只是常规的Object:

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

从那以后,你的'myclone'拥有它自己的生命,你看到的失败可能很久之后。 我能给你的最好答案是'grep newObj。*'你的源文件和你的所有库。 如果这是射击目标,请告诉我们......