JavaScript Eval()生成';意外标记)错误';
下面的代码有点问题,我想知道我做错了什么 在进行eval调用的线路上,我收到一个未捕获的SyntaxError(意外令牌)错误JavaScript Eval()生成';意外标记)错误';,javascript,jquery,eval,Javascript,Jquery,Eval,下面的代码有点问题,我想知道我做错了什么 在进行eval调用的线路上,我收到一个未捕获的SyntaxError(意外令牌)错误 function myfunction(){ var p1 = ''; var p2 = ''; var p3 = ''; for (i=1; i<=3; i++){ eval("$('#p"+i+"').closest('.filter').find('.vals div').each(function(){if
function myfunction(){
var p1 = '';
var p2 = '';
var p3 = '';
for (i=1; i<=3; i++){
eval("$('#p"+i+"').closest('.filter').find('.vals div').each(function(){if ($.trim(p"+i+").length > 0) {p"+i+" += ',';} p"+i+" += $(this).attr('class');});");
}
}
函数myfunction(){
var p1=“”;
var p2='';
var p3=“”;
对于(i=1;i您可能缺少一个“
FWI:与嵌套函数和链接不同,您会发现将其分解为几行离散的代码并使用命名函数要容易得多。您的代码,无需评估
function myfunction(){
var p1 = '';
var p2 = '';
var p3 = '';
for (i=1; i<=3; i++){
$("#p"+i).closest(//..... rest here
函数myfunction(){
var p1=“”;
var p2='';
var p3=“”;
对于(i=1;i您最好使用数组并正常执行代码:
function myfunction(){
var p = [null, '', '', '']; //Empty zeroth element to keep your 1-indexing
for (i=1; i<=3; i++){
$('#p'+i).closest('.filter').find('.vals div').each(function(){
if ($.trim(p[i]).length > 0) {
p[i] += ',';
}
p[i] += $(this).attr('class');
});
}
}
函数myfunction(){
var p=[null','','','];//空的第0个元素以保持1-1索引
对于(i=1;i 0){
p[i]+=',';
}
p[i]+=$(this.attr('class');
});
}
}
“我想知道我做错了什么”--我的答案是首先使用eval()
…你有一个难以调试的语句。我不明白为什么没有eval()
,你就不能写这篇文章…你可以跳过对像“$(''p'+I+')”这样的语句使用eval…只需使用$('p['+I)因为jquery将选择器作为字符串。我真的看不到eval在这里有什么好处。该死!+1比我快了一分钟!哈?完全不正确!ES5 10.4.2eval
在大多数情况下都是在本地范围内运行的(在ES3中,我认为在所有情况下都是这样)@davin Yea,我的测试结构很差/我正在考虑setTimeout
。但是仍然建议删除eval
。@Dennis:太好了……感谢您认真阅读并花时间理解代码的目的(很抱歉,很难阅读)并提供了更好的解决方案。不,恐怕不行。我正在尝试在我的eval()中为不同名称的变量赋值;在循环时,应该使用数组,而不是使用不同的变量
function myfunction(){
var p1 = '';
var p2 = '';
var p3 = '';
for (i=1; i<=3; i++){
$("#p"+i).closest(//..... rest here
function myfunction(){
var p = [null, '', '', '']; //Empty zeroth element to keep your 1-indexing
for (i=1; i<=3; i++){
$('#p'+i).closest('.filter').find('.vals div').each(function(){
if ($.trim(p[i]).length > 0) {
p[i] += ',';
}
p[i] += $(this).attr('class');
});
}
}