2012-03-04 87 views
0

我已经做了一个小的函数,我将在应用程序中重复使用几次。这似乎是我写的语法错误,因为我的控制台显示一个错误“对象[对象对象]没有方法'fadeIt'jQuery将对象从一个函数传递到另一个函数

所以我想这个问题是传递一个函数的对象到另一个..不是知道如何做到这一点优雅。我的代码如下。

感谢您的帮助!

http://jsfiddle.net/danielredwood/aFx6u/2/

function fadeIt() { 
    $(this).animate({ 
     opacity:0 
    }, 400, function(){ 
     //$(this).css('cursor','auto'); 
     //$(this).children('img').css('margin-left','-100px'); 
    }); 
} 

$('.box').click(function(){ 
    $(this).fadeIt(); 
}): 
+2

为什么不直接使用jQuery的'淡出()'函数? – rjz 2012-03-04 01:51:34

+0

这将帮助你解决它:http://docs.jquery.com/Plugins/Authoring – nnnnnn 2012-03-04 01:53:16

+0

@rjz - 将结合一些其他的好东西,评论是。 – technopeasant 2012-03-04 01:56:32

回答

2

你可能想使这个成为一个插件,并使用以下方法:

$ .fn.fadeIt =函数(){

};然后你可以使用$(this).fadeIt();这样你就可以使用$(this).fadeIt();

0

此修复您的代码。

function fadeIt(element) { 
    element.animate({ 
     opacity:0 
    }, 400, function() { 
     // element.css('cursor','auto'); 
     // element.children('img').css('margin-left','-100px'); 
    }); 
} 

$('.box').click(function() { 
    fadeIt($(this)); 
}): 

但是,我强烈推荐使用jQuery的内置函数,如fadeOutfadeIn

+0

插件或现有功能最终会更好,但是这直接回答了问题。一些解释,而不是仅仅是代码更好的答案,但我想知道谁downvoted它和为什么。 – 2012-03-04 01:55:37

+0

@GregPettit,我同意并相应地编辑它。 – Sparky 2012-03-04 01:58:45

1

您可以通过使用.call(),这样设置fadeIt函数的调用上下文...

fadeIt.call(this) 

说明:

JavaScript有两种方法,.call().apply()这两个都可以让你手动设置值this在函数哟你在调用的时候调用。

.call().apply()方法可用于所有JavaScript函数。

该方法的第一个参数是您要在调用的函数中为this设置的值。两者之间的唯一区别是参数如何传递。


随着.call(),参数分别传递,就像...

func.call(thisArg, 'foo', 'bar') 

随着.apply()参数都为一个数组类集合过去了......

func.apply(thisArg, ['foo', 'bar']) 

。 ..将在被调用的函数中被解构为单独的参数。

+1

整洁。我不认为我知道这件事,如果我做了,我就忘记了。 – 2012-03-04 01:56:48

+0

@GregPettit:是的,它有时非常方便。 – 2012-03-04 02:08:02

0

你要做的是使用点符号来调用一个函数,它在JavaScript中仅限于对象的原型。你想要做的是改变它,所以你通过this在fadeIt

参数
function fadeIt(obj) { 
... 
} 

然后调用fadeIt($(this));

相关问题