动态创建变量

时间:2014-02-08 10:59:49

标签: javascript jquery variables

我动态创建代码段:

var gg = setInterval(function() {
    if($('p:visible').length > 0) {
        $('p').trigger('click') ;
        clearInterval(gg);
    }
},500);

代码有效。问题是我使用不同的选择器创建相同的代码片段:

var gg = setInterval(function() {
    if($('input:visible').length > 0) {
        $('input').trigger('focus') ;
        clearInterval(gg);
    }
},500);

因此,当我将这些代码放在一起时,整个事情会进入某个循环并且它不再起作用,请看一下这个例子:JsFiddle

问题是我为代码分配了相同的变量(gg)。所以我的问题是:每次创建这些代码片段时,如何创建不同的变量?我用var x=x++尝试了一些东西,但我无法让它工作。

4 个答案:

答案 0 :(得分:2)

以下两种方法可以完成您想要做的事情(动态变量)。第一个是评估字符串。

(有很多文章可以解释为什么这很糟糕。但是,为了完整起见,我提供了这个例子......也许是作为一个不做的例子;)< / p>

根据您传入的字符串创建变量的函数,然后使用该eval'd变量将起作用。类似的东西:

function varMaker(str){
    // Nothing fancy...
    var token = Math.floor(new Date().getTime() * Math.random(10));

    // Defining variable with no var for global scope (bad)
    return eval(str + '_' + token + ' = undefined;');
}

这是一个快速/肮脏的小提琴示例(没有函数制作者,只是一个评估的字符串):http://jsfiddle.net/D3wZ7/

第二种更清洁的方法是使用方括号表示法(以及我推荐的内容)。像这样:

window['gg' + randomized_string] = setInterval(..)

注意:一旦定义了变量,就可以像往常一样引用它:

window['my_cool_variable' + 1] = "stack";
alert(my_cool_variable1); //alerts "stack"

这是一个证明这一点的小提琴:http://jsfiddle.net/ZmGH5/

祝你好运!

答案 1 :(得分:1)

var gg= [];
gg[0] = setInterval(function() {
    if($('p:visible').length > 0) {
        $('p').trigger('click') ;
        clearInterval(gg[0]);
    }
},500);

gg[1] = setInterval(function() {
    if($('input:visible').length > 0) {
        $('input').trigger('focus') ;
        clearInterval(gg[1]);
    }
},500);

所以继续这样下去吧。您可以使用数组创建大量内容。

答案 2 :(得分:1)

只需将片段放入匿名包装器函数中,以便变量gg不再是全局的:

(function(){
    var gg = setInterval(function() {
        if($('input:visible').length > 0) {
            $('input').trigger('focus') ;
            clearInterval(gg);
        }
    },500);
})();

(function(){
    var gg = setInterval(function() {
        if($('p:visible').length > 0) {
            $('p').trigger('click') ;
            clearInterval(gg);
        }
    },500);
})();

(这些功能自动执行......)

答案 3 :(得分:0)

在其他代码段更改中 var gg = ... 到var hh = ... 然后clearInterval(hh)