2015-05-30 104 views
8

我想用smarty做一些javascript,並使用javascript變量並檢查該值是否包含在smarty數組中。Javascript variable and smarty

下面是代碼,我有

if (object.data[i].Application === selectedApplication || {if isset($Applications) && $Applications|@count > 0} true {else} false {/if}) 
{ 
    {if not isset($Applications)} 
     $("#cboApplications").append("<option selected value=\""+object.data[i].id+"\">"+object.data[i].Application+"</option>"); 
    {else} 
     {if '9'|in_array:$Applications} 
     console.log("id " + id + " in array"); 
     $("#cboApplications").append("<option selected value=\""+object.data[i].id+"\">"+object.data[i].Application+"</option>"); 
    {else} 
     console.log("id " + id + " not in array"); 
     $("#cboApplications").append("<option value=\""+object.data[i].id+"\">"+object.data[i].Application+"</option>"); 
    {/if} 
{/if} 
} 

我與遇到的問題是{if '9'|in_array:$Applications}。目前我已經硬編碼的值,而不是使用JavaScript變量作爲測試,但我得到了相同的結果。

下面是該陣列的外觀從內側smarty的打印時等

array (
    0 => '9', 
) 

有在該列表框中cboApplications多個值,其具有8,5,6,9和10

的值

由於某些原因,即使$ Applications數組中只有9個,console.log的作用就好像每個項目都在陣列內部,而不僅僅是9個。

感謝您提供任何幫助。

回答

2

您必須在Smarty for JavaScript中使用{literal}。示例:

{literal} 
<script type="text/javascript"> 
    document.write("{/literal}{$text}{literal}"); 
</script> 
{/literal} 

有關更多信息,請參見Smarty Documentation

+0

這在Smarty的3只要非Smarty的大括號由白色空間包圍了改進:http://www.smarty.net/docs/en/language.function.literal.tpl –

+0

@ JohnMcMahon:對不起,從Google獲取了錯誤的網址:-D編輯了我的帖子。 – Richard

+0

這可能是他的問題,如果他使用Smarty 2. –

2

您一直在檢查數組9中是否存在9,因此它總是通過,因爲我們知道數組9中存在數字9。

你能否提供正在檢查變量的實際代碼而不是9?另外請記住,smarty代碼在服務器上執行,而JavaScript不會,所以我不能真正想象你想要達到什麼目的。實際的代碼可能有幫助

2

你能也許嘗試這樣的事:

if (object.data[i].Application === selectedApplication || {if isset($Applications) && $Applications|@count > 0} true {else} false {/if}) 
{ 
{if not isset($Applications)} 
    $("#cboApplications").append("<option selected value=\""+object.data[i].id+"\">"+object.data[i].Application+"</option>"); 
{else} 
    {if $Applications.indexOf('9') != -1} 
    console.log("id " + id + " in array"); 
    $("#cboApplications").append("<option selected value=\""+object.data[i].id+"\">"+object.data[i].Application+"</option>"); 
{else} 
    console.log("id " + id + " not in array"); 
    $("#cboApplications").append("<option value=\""+object.data[i].id+"\">"+object.data[i].Application+"</option>"); 
{/if} 
{/if} 

}

我換成inArray使用JavaScript indexOf,所以也許可以幫助。

2
<script> 
var apps = []; 

{if isset($Applications)} 
apps = {$Applications|json_encode}; 
{/if} 

if($.inArray(9, apps)) { 
    console.log('....'); 
} 
</script>