首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery中匿名函数的反匿名化

jQuery中匿名函数的反匿名化
EN

Stack Overflow用户
提问于 2011-02-24 03:27:28
回答 3查看 185关注 0票数 1

这可能是一个相当简单的问题,但它让我抓狂,所以我把它贴在这里。

我有一些如下形式的jQuery:

代码语言:javascript
复制
if (jQuery('.SearchRegions:checked').length == 0) { 

jQuery('.SearchRegions').each(function(){

        //code

    });

} else {

jQuery('.SearchRegions:checked').each(function(){

        //the same code     

    });

}

显然,在每个函数中重复一大块代码似乎很可笑。但是当我尝试命名和移动函数时,它似乎完全崩溃了--可能是因为范围和/或函数内部的jQuery(这)不再引用同一对象的问题?

有没有人可以通过发布我的代码应该是什么样子的大体概念来帮助我?(或任何其他优化或重铸,以使其工作,将非常感谢!)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-24 03:33:19

您绝对可以只定义一个函数并按名称使用它:

代码语言:javascript
复制
function someHandler(event) {
  // code code code
}

jQuery('.SearchRegions').each(someHandler);

注意,当您通过名称引用函数时,您不会包含"()“(”()“)。

票数 3
EN

Stack Overflow用户

发布于 2011-02-24 03:34:12

假设闭包确实是问题所在,您可以参数化您的“匿名”函数以将这些值传递给它。例如:

代码语言:javascript
复制
function eachRegion(values, $container, foo) {
    // common code which uses scope variables `values`, `$container`, and `foo`
}

// elsewhere, in code defining `values`, `$container`, and `foo`...

if (jQuery('.SearchRegions:checked').length == 0) { 
    jQuery('.SearchRegions').each(function(){
        eachRegion(values, $container, foo);
    });
} else {
    jQuery('.SearchRegions:checked').each(function(){
        eachRegion(values, $container, foo);
    });
}
票数 3
EN

Stack Overflow用户

发布于 2011-02-24 03:36:40

您可以将函数定义为变量,并在每个方法调用中使用该变量。

代码语言:javascript
复制
var yourEachFunction = function(){$("ul").append("<li>" + $(this).val() + "</li>");}

if (jQuery('.SearchRegions:checked').length == 0) {
    jQuery('.SearchRegions').each(yourEachFunction );
} else {
    jQuery('.SearchRegions:checked').each(yourEachFunction );
}

这是在jsfiddle上工作的示例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5095985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档