Помощь по функции eval () - PullRequest
       26

Помощь по функции eval ()

0 голосов
/ 06 сентября 2011

Мне нужна помощь по этой eval() проблеме:

var ScoreFuncName = 'scoreCondition_' + criteriaName;

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

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

Функция eval() определяет, какой флажок отмечен, и будет выполнять другие действия, соответственно, она отлично работала в Firefox, но не в Google Chrome и IE.

Царапаю мою голову в течение 3 дней о том, как это исправить. Спасибо.

Ответы [ 3 ]

6 голосов
/ 06 сентября 2011

Вы не должны использовать eval для этого.

Если функция находится в глобальной области видимости. Все, что вам нужно сделать, это

window[ScoreFuncName](allCheckBox.length);

Было бы лучше назвать это пространство вместо использования глобала с окном

2 голосов
/ 06 сентября 2011

Eval не нужен для этого. Также обратите внимание, что я вызываю size для объекта jQuery, а не length.

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

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

scoreFunc(allCheckBox.size()); 
0 голосов
/ 06 сентября 2011

Хм ... не надо.

Реально нет необходимости использовать 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)
...