首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript:定义函数映射

Javascript:定义函数映射
EN

Stack Overflow用户
提问于 2014-10-28 23:36:55
回答 2查看 51关注 0票数 1
代码语言:javascript
复制
$("#searchType").on('change', function () {
    var selectionAction = {
        All: loadAll(),
        Competitions: loadAll("competitions"),
        Clubs: loadAll("clubs"),
        Teams: loadAll("teams")
    };
    var selection = $("#searchType").find('option:selected').val();
    selectionAction[selection]
});

见上面的代码。其思想是,当选择等于我的对象中的一个属性时,就会调用相应的函数。

例如,当选择等于Competitions时,我们将调用loadAll("competitions")函数。

相反,我发现,当它进入onChange函数时,它会调用所有函数。

我在这里做错什么了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-28 23:39:35

使用匿名函数进行调用。当前,您正在存储未定义的函数调用的结果。

代码语言:javascript
复制
var selectionAction = {
    All: function(){loadAll()},
    Competitions: function(){loadAll("competitions")},
    Clubs: function(){loadAll("clubs")},
    Teams: function(){loadAll("teams")}
};
var selection = $("#searchType").find('option:selected').val();
selectionAction[selection]();// make sure to call the anonymous function

或者,如果你喜欢简洁,

代码语言:javascript
复制
$("#searchType").on('change', function () {
 loadAll($("#searchType").find('option:selected').val().replace("All","").toLowerCase())
});
票数 5
EN

Stack Overflow用户

发布于 2014-10-28 23:46:12

当您指定loadAll()loadAll("competitions")loadAll("clubs")等时,实际上您将立即执行该函数。您想要做的是让对象具有非函数调用的属性,如下所示:

代码语言:javascript
复制
 var selectionAction = {
    All: '',
    Competitions: 'competitions',
    Clubs: 'clubs',
    Teams: 'teams'
  };

然后做:

代码语言:javascript
复制
var selection = $("#searchType").find('option:selected').val();
loadAll(selectionAction[selection]);

并确保您的loadAll函数检查其第一个参数是否存在。

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

https://stackoverflow.com/questions/26620374

复制
相关文章

相似问题

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