2015-01-09 29 views
2

我試圖在循環中連接變量中的html並返回與填充。但我發現在循環語法錯誤的html連接:意外的標識符(jquery + html + php)

錯誤未捕獲的SyntaxError:意外的標記+ =

我的代碼。

<a style="cursor: pointer" id="addmore">More Entree ?</a> 

<?php $json = JSON_encode($entree); ?> 

<script> 

function populate() { 
var json = <?php echo $json; ?>; 
    for (var i = 0; i < json.length; i++) { 
    var obj = json[i]; 
    var option += '<option value="' + obj.id + '">' + $.trim(obj.title) + '</option>'; 
    } 
return option; 
} 

$(function (c) { 
    $("a#addmore").click(function() { 
    console.log(populate()); 
    //$("p").append('<select>' + populate() + '<select>'); 
    }); 

</script> 

json

+0

你有沒有輸出json的例子? – 2015-01-09 22:47:10

+0

好吧,把json例子放在下一個編輯中。 – 2015-01-09 22:48:35

+0

你不應該根據你得到的答案來編輯你的原始代碼,那麼答案將停止有意義。如果你嘗試其他的東西,把它們放在原代碼/問題的下面。 – jeroen 2015-01-09 23:11:20

回答

2

不能過度和在同一範圍內重新聲明你的變量,並期望它添加到其以前的值。

你需要的東西,如:

function populate() { 
    // only declare the variables once 
    var json = <?php echo $json; ?>, 
     option = '', 
     obj; 

    for (var i = 0; i < json.length; i++) { 
    obj = json[i]; 
    option += '<option value="' + obj.id + '">' + $.trim(obj.title) + '</option>'; 
    } 

    return option; 
} 

編輯:an example here

+0

好的,謝謝bt令牌錯誤+ =仍然存在。 – 2015-01-09 22:56:32

+0

@ fab_s3看到我添加的例子,它工作正常。你確定錯誤是在腳本的那個部分生成的嗎? – jeroen 2015-01-09 23:05:32

+1

謝謝。有效。重新聲明變量是我的錯誤。 – 2015-01-09 23:21:15

0

語法錯誤並不是真正歸因於聲明變量的地方。如果我們將「+ =」更改爲「=」,那麼代碼仍然會運行而不會出現異常(儘管結果無效)。

var option = '<option value="' + obj.id + '">' + $.trim(obj.title) + '</option>'; 

簡而言之,聲明變量並同時應用+ =運算符是無效的JavaScript。

但是爲什麼?

根據the MDN doc for 'var'

var varname1 [= value1 [, varname2 [, varname3 ... [, varnameN]]]];

在此,「=」被明確列爲「變種」和第一值之間的唯一有效的符號。

這是因爲在這種情況下, 「=」 代表初始化,不分配

再次,從MDN

Variable declarations, wherever they occur, are processed before any code is executed.

這是一個微妙但重要的區別在於:

初始化期間預執行階段發生,而 「+ =」(執行加法,然後將結果分配)算作「執行代碼」。並且因爲在執行任何代碼之前必須解析所有變量,所以在之後所有變量都已初始化之後,才能發生+ = = !你有一個Catch-22!因此,在var聲明之後,只有「= x」,逗號和更多變量聲明纔會有效,直到聲明結束爲止;到達了。

相關問題