2015-05-30 16 views
8

Tôi đang cố gắng làm một số javascript với thông minh và sử dụng biến javascript và kiểm tra xem giá trị có được chứa trong một mảng thông minh hay không.Biến Javascript và thông minh

Dưới đây là đoạn code mà tôi có

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} 
} 

Vấn đề tôi đang gặp khó với là {if '9'|in_array:$Applications}. Tại thời điểm này tôi đã hardcoded giá trị thay vì sử dụng biến javascript như là một thử nghiệm nhưng tôi nhận được kết quả tương tự.

Dưới đây là những gì các mảng trông giống như khi in ra từ bên trong smarty

array (
    0 => '9', 
) 

Có nhiều giá trị trong hộp danh sách này cboApplications trong đó có một giá trị 8, 5, 6, 9 và 10

Vì một lý do nào đó, mặc dù chỉ có 9 trong mảng $ Applications, console.log hoạt động như thể mọi mục đơn nằm trong mảng, không chỉ là 9.

Cảm ơn bạn đã giúp đỡ.

Trả lời

2

Bạn phải sử dụng {literal} trong Smarty cho JavaScript. Ví dụ:

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

Để biết thêm thông tin, hãy xem Smarty Documentation.

+0

này đã được cải thiện trong Smarty 3 miễn là dấu ngoặc nhọn phi Smarty được bao quanh bởi không gian màu trắng: http://www.smarty.net/docs/en/language.function.literal.tpl –

+0

@ JohnMcMahon: Xin lỗi, đã nhận được URL sai từ Google :-D Đã chỉnh sửa bài đăng của tôi. – Richard

+0

Điều này rất có thể là vấn đề của anh ta nếu anh ấy sử dụng Smarty 2. –

2

Bạn luôn kiểm tra xem 9 có nằm trong mảng $Applications hay không, vì vậy nó luôn chuyển vì chúng ta biết rằng 9 nằm trong mảng.

Bạn có thể cung cấp mã thực tế đang kiểm tra biến thay vì 9 không? Cũng nên nhớ rằng mã thông minh được thực hiện trên máy chủ trong khi JavaScript không vì vậy tôi không thể tưởng tượng bạn đang cố gắng đạt được điều gì. Mã thực tế có thể hữu ích.

2

Bạn có thể có thể thử một cái gì đó như thế này:

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} 

}

tôi thay inArray với javascript indexOf, như vậy có lẽ có thể giúp.

2
<script> 
var apps = []; 

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

if($.inArray(9, apps)) { 
    console.log('....'); 
} 
</script> 
Các vấn đề liên quan