jQuery,得到.attr(“id”),根据ID调用函数

时间:2017-07-22 06:37:26

标签: javascript jquery

我不想运行一个大的if,else,else,else类型语句。我基本上是在寻找一个excel INDIRECT()等价物,在那里我得到id的字符串,并根据我正在迭代的id调用该字符串作为函数。 我有一些类的输入,jQuery使得微调器基于。

$(document).ready(function(){
    var primary = $(".spinnerPrimary");
    var secondary = $(".spinnerSecondary");
    primary.spinner({
        min: 7,
        max: 20,
    });
    primary.spinner("value", 10);
    secondary.spinner({
        min: -4,
        max: 4
    });
    secondary.spinner("value", 0);

当做max,min等时,我想做一个调用函数来更新各种span容器的旋转事件。我可以运行一个只更新每个span的函数,或者运行一个大的if / else / else case-type语句,所以我确实有选项。我真正想要的是使用this.attr("id")来拉取id,以便每个微调器都根据输入微调器的id设置旋转,这是与定义的名称相对应的相同字符串功能。

$(document).ready(function(){
    var primary = $(".spinnerPrimary");
    var secondary = $(".spinnerSecondary");
    primary.spinner({
        min: 7,
        max: 20,
        spin: //fancy code
    });
    primary.spinner("value", 10);
    secondary.spinner({
        min: -4,
        max: 4,
        spin: //same fancy code
    });
    secondary.spinner("value", 0);

    function x() {
        //fancy equation code
    };

    function y() {
        //fancy equation code
    };

在上面的例子中,如果id是“x”,那么我希望它调用函数x(),id =“y”调用y()等。我正在寻找如何做这个特定的场景,而不是如何以另一种方式做(例如,基于已知的id和相应的函数运行if / else)。如果我提到的两种选择是唯一的方法,那就这样吧。

复制另一个问题:非常相似,但也需要帮助映射函数并将它们应用于微调器。 jQuery仍然是新手,因此是一个多方面的(?)问题。

1 个答案:

答案 0 :(得分:0)

以这种方式尝试:

// Setup your functions as a map, so they are easily
// accessible by name.
var fns = {
  x: function(){
    console.log('running x!');
  },
  y: function(){
    console.log('runnning y!');
  }
}

var primary = $(".spinnerPrimary");

primary.spinner = function(options){
  // Tie your `spin` function to the spinner.
  console.log('spinning');
  options.spin();
}
primary.spinner({
    min: 7,
    max: 20,

    // Assign `spin` to one of the `fns` from above
    // using `id` as a key.
    spin: fns[primary.attr('id')] 

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="x" class="spinnerPrimary"></div>