如何将变量更改为函数名称?

时间:2017-01-25 09:58:44

标签: javascript jquery ajax

有没有办法克隆变量名?您可以在下面看到(名称 a1

$(document).ready(function() {
    name = "a1"; // This "NAME" is a1

})

function name() { // USING "NAME"
        $("#test" + name).keydown(function(a) { // USING "NAME"
                13 == a.keyCode && load + name(); // USING "NAME"
        })
}
function load + name() {
        $("#blue" + name).show(); // USING "NAME"
        localStorage. + name; // USING "NAME"
}

所以我想减少javasript的大小。因为,如果我不这样做。因此会有很多这样的命令(虽然只是名称不同)。任何 a1,a2,a3,a4 .......... z8,z9

我认为除了复制和粘贴之外别无他法。并替换每个名称。但我希望,还有其他方法

function a1() {
        $("#testa1").keydown(function(a) { 
                13 == a.keyCode && loada1();
        })
}
function a2() {
        $("#testa2").keydown(function(a) { 
                13 == a.keyCode && loada2(); 
        })
}

    // TO .................................

function z9() {
        $("#testz9").keydown(function(a) { 
                13 == a.keyCode && loadz9(); 
        })
}

4 个答案:

答案 0 :(得分:1)

正确的解决方案

考虑将这些值移动到输入本身的data-*属性。像这样的结构:

<input type="text" data-name="a1">

$('input').keydown(function(a) { 
     13 == a.keyCode && load( $(this).attr('data-name') ); 
});

function load(name){
    $("#blue" + name).show(); // USING "NAME"
    localStorage.name; // USING "NAME"
}

附注,注意localStorage. + name;我没有得到你在那条线上想要达到的目标。

现在,对于危险练习。请不要遵循这一点,它可能是语言的一个方面,但并不意味着你应该使用它。

使用window[<functionName>]在全局范围内定义动态函数。

var name = 'a1';
window[name] = function(){
    $("#testz9").keydown(function(a) { 
           13 == a.keyCode && window['load'+name](); 
    });
}; 
window['load'+name] = function(){
    $("#blue" + name).show(); // USING "NAME"
    localStorage. + name; // USING "NAME"
}; 

答案 1 :(得分:1)

您可以为函数使用参数。

优点:只有一个功能,可以重复使用多个元素。

function go(n) {
    $("#test" + n).keydown(function(a) {
        13 == a.keyCode && load(n);
    });
}

function load(n) {
    $("#blue" + n).show();
    localStorage[n];
}

答案 2 :(得分:0)

当你有很多函数执行几乎相同的工作时,这是一个非常明确的指示,你应该只有一个带参数的函数。这样,如果你想改变你的功能,你不需要改变几十个而只需要改变一个。

function register(name) {
  $("#test" + name).keydown(function(a) { 
    13 == a.keyCode && load(name);
  })
}

function load(name) {
  $("#blue" + name).show();
  localStorage.getItem(name); // do something with it
}

// Register all these methods
["a1", "a2", ..., "z9"].forEach(register);

答案 3 :(得分:0)

首先,为要附加keydown处理程序的所有元素分配一个公共类。说loading。这允许您在一个处安装所有处理程序,然后查看ID以确定名称。

当您知道名称时,请调用一个名为参数的共享load()函数。

$('.loading').keydown(function() {
    var id = $(this).attr('id');
    name name = id.substring(4); // strip 'test'
    load(name);
});

function load(name) {
    $("#blue" + name).show(); // USING "NAME"
    localStorage[name]; // USING "NAME"
}

说明:

  • 不要依赖长度/前缀,而是使用_-之类的字符,并在该字符的位置拆分名称以查找后缀。

    < / LI>
  • 您还应该查看HTML5数据属性,以指定要在load()中使用的密钥。