2010-08-30 93 views
1

在函数里,我有:调用函数定义一个变量

var myType; 
if ($(this).is(".whatever")){ 
    myType = typeOne; 
} else if ($(this).is(".something")){ 
    myType = typeTwo; 
} 

这工作得很好。不过,我想把它变成一个我可以调用的独立函数,因为我在几个不同的地方使用它。我写的功能是:

function setMyType(){ 
    var myType; 
    if ($(this).is(".whatever")){ 
    myType = typeOne; 
    } else if ($(this).is(".something")){ 
    myType = typeTwo; 
    } 
} 

当我在我的主函数调用setMyType(),主要功能不能访问的myType。如果我在setMyType()中警告(myType),则警报包含正确的值。但主要功能无法看到这个价值。

这是一个范围问题,但我不知道如何解决它。我尝试在main函数中定义myType并将其传递给setMyType()。虽然setMyType()从主函数中获取myType的值很好,但它仍然不会将更改后的值返回给主函数。

+2

通过您的函数setMyType()无法解析$(this)的方式,您需要用其他jquery选择器替换它。 – 2010-08-30 07:25:33

回答

4

你会从返回值功能,像这样:

function getMyType(){ 
    var myType; 
    if ($(this).is(".whatever")){ 
    myType = typeOne; 
    } else if ($(this).is(".something")){ 
    myType = typeTwo; 
    } 
    return myType; 
} 

// elsewhere: 
var myType = getMyType(); 
+0

+1,尽管该方法可能更好地命名为“getMyType”或类似的 – harto 2010-08-30 05:43:18

+0

好点,已编辑。 – 2010-08-30 05:57:48

+0

这样做。我以为我会尽早回复价值,但我一定在某个地方犯了错。 – motorfirebox 2010-08-30 09:55:56

0

将在全球范围内myType(我加了一个“G”像全球前缀):

// in global scope 
var gMyType = null; 

function setMyType(){ 
    if ($(this).is(".whatever")){ 
    gMyType = typeOne; 
    } else if ($(this).is(".something")){ 
    gMyType = typeTwo; 
    } 
} 

NB:我认为你需要改变$(this)部分

0

你可以把它在全球范围内为@RC建议,或者你可以将其定义是这样的:

function setMyType(){ 
    if ($(this).is(".whatever")){ 
    document.window.gMyType = typeOne; 
    } else if ($(this).is(".something")){ 
    document.window.gMyType = typeTwo; 
    } 
} 

现在你可以从任何地方访问网页:

alert(document.window.myType); 
0

返回值可能是最好的解决办法,但这里是另一个。您可以将对象传递给作为范围函数的函数,并且您的值将被设置为此对象的属性。

function setMyType(scope){ 
    if ($(this).is(".whatever")){ 
    scope.myType = typeOne; 
    } else if ($(this).is(".something")){ 
    scope.myType = typeTwo; 
    } 
} 

这将用于像:

var scope = {}; 
setMyType(scope); 
//now scope.myType contains your value 

我不鼓励你

此,如果你要加载外部脚本不污染全局命名空间的方法往往是做在你的情况下使用这种方法(返回值更有意义,更容易理解),但值得一提的是它。

0

除非函数在闭包内部设置,或者它是显式将this设置为事件处理程序元素的jQuery回调的一部分,否则您将需要避免依赖此函数,因为它会引用自身。

function setMyType(obj){ 
    myType = ($(obj).is(".whatever"))?typeOne:(($obj).is(".something"))?typeTwo:null; 
    return myType; 
} 

--a小三元好measure--你要知道这将是刚刚在这种情况下很容易,如果对象确实含有这在闭合,您只需设置this.myType = setMyType(this),如果你返回值,就会将其作为对象属性。

+0

在实际的代码中,我有var = =(this),并且在我调用的函数中使用'that'。 – motorfirebox 2010-08-30 09:58:23

相关问题