我试图做一些JavaScript与Smarty和使用JavaScript变量和检查值是否包含在一个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。
您必须在Smarty中使用{literal}
for JavaScript。例子:
{literal}
<script type="text/javascript">
document.write("{/literal}{$text}{literal}");
</script>
{/literal}
更多信息请参见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 $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}
}
我用javascript indexOf代替了inArray,所以也许这可以帮助。
您总是检查9是否在$Applications
数组中,因此它总是通过,因为我们知道9在数组中。
你能提供检查变量的实际代码吗?还要记住,智能代码是在服务器上执行的,而JavaScript不是,所以我真的无法想象你想要实现什么。实际代码可能会有帮助。
<script>
var apps = [];
{if isset($Applications)}
apps = {$Applications|json_encode};
{/if}
if($.inArray(9, apps)) {
console.log('....');
}
</script>