2011-10-26 42 views
0

我在與下面的代碼有點問題,我想知道我在做什麼錯。的JavaScript的eval()產生「意外的標記)錯誤」

我發現了一個未捕獲的SyntaxError:意外的標記)錯誤在哪裏的EVAL調用了行。

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');});"); 
    } 
} 

這裏是適用的HTML:

<div class="filter"> 
    <label>Organizations</label> 
    <input id="p1" type="text" value="" /> 
    <div class="vals"> 
     <div class="3" title="Click to remove">ABC School District</div> 
     <div class="4" title="Click to remove">DEF School District</div> 
    </div> 
</div> 
<div class="filter"> 
    <label>Groups</label> 
    <input id="p2" type="text" value="" /> 
    <div id="vals"></div> 
</div> 

如果不是我也使用jQuery這裏完全明顯。

感謝

+5

*「我不知道我在做什麼錯了」 * - 我的答案是使用'的eval()'擺在首位..你很難調試語句。我不明白爲什麼你不能在沒有'eval()'的情況下寫這個... – Carpetsmoker

+2

不要使用eval。 – jbabey

+0

您可以通過簡單地使用$( '#P [' + I)在jQuery採取selecter作爲字符串跳過使用eval像這些語句「$( '#P 「+ I +」')...... 。我真的。看不到這裏的eval任何優勢 – Birey

回答

5

您是賭注之三關使用數組,只是執行的代碼正常:

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'); 
     }); 
    } 
} 
+0

該死!+1通過一分鐘! – locrizak

+0

咦?完全不正確的!ES5 10.4.2'eval'在大多數情況下在局部範圍內運行(和ES3我認爲這是在任何情況下)。 – davin

+0

@davin是啊,打我,我的測試,製作粗糙的/我想setTimeout'的'還是建議去除eval'的'雖然 – Dennis

1

您可能忽略了「

eval("$('#p" + i + "'")... 

FWI:代替嵌套功能和鏈接,你會發現它更容易把它打入命名的代碼,並使用幾個分立線功能。

4

你的代碼,沒有EVAL

function myfunction(){ 
    var p1 = ''; 
    var p2 = ''; 
    var p3 = ''; 

    for (i=1; i<=3; i++){ 
     $("#p"+i).closest(//..... rest here 
+0

不,恐怕將無法正常工作我想賦值在我的eval()以不同的方式命名變量; – Ryan

+1

您應該使用,而不是使用不同的變量時,數組循環 –