有关eval()函数的帮助

时间:2011-09-06 04:17:22

标签: javascript function checkbox eval

我需要有关此eval()问题的帮助:

var ScoreFuncName = 'scoreCondition_' + criteriaName;

var allCheckBox = $('div#'+SubListId).find("input:image[name^='" + ChkBoxPrefix + "'][value='1']");

eval(ScoreFuncName + '(' + allCheckBox.length + ')');

eval()函数正在评估勾选了哪个复选框,并会相应地执行其他操作,它在Firefox中运行良好但在谷歌Chrome和IE中运行不佳。

如何解决这个问题,抓了我3天。谢谢。

3 个答案:

答案 0 :(得分:6)

你不应该使用eval。

如果功能在全局范围内。您需要做的就是

window[ScoreFuncName](allCheckBox.length);

最好为空间命名,而不是使用带窗口的全局

答案 1 :(得分:2)

不需要Eval来执行此操作。另请注意,我在jQuery对象而不是size上调用length

var scoreFunc = this['scoreCondition_' + criteriaName];

var allCheckBox = 
    $('div#'+SubListId).find("input:image[name^='" + ChkBoxPrefix + "'][value='1']");

scoreFunc(allCheckBox.size()); 

答案 2 :(得分:0)

嗯...不要。

实际上在这种情况下不需要使用eval(我会说不需要查找函数的字符串)。由于看起来很清楚你有一个有限且可知的条件数量和有限且可知的函数数量,那么你可以简单地使用一个开关来动态地选择一个函数:

var toRun; // variable to store the function.
switch(criteriaName)
{
    case "criteria1":
       // keep the actual function in the variable, not some string.
       toRun = function(e){console.log("I is so special! " + e)}
       break;
    case "criteria2":
       toRun = function(e){console.log( e + " is not a squid!" )}     
       break;
}
var allCheckBox = $('div#'+SubListId).find("input:image[name^='" + 
                     ChkBoxPrefix + "'][value='1']"); 
// then just call it!
toRun(allCheckBox.length)
相关问题