我动态创建代码段:
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++
尝试了一些东西,但我无法让它工作。
答案 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)