所以基本上,我在输入框的keyUp方法中创建变量,从一个聪明的循环中获取它们的数据(这是在$(document.ready)
这是代码
{section name=unitEl loop=$allNavies}
$("#attack-navy{$allNavies[unitEl].ID}-number").keyup(function(){
var unit = {$allNavies[unitEl]};
var element = $("#attack-navy" + unit.ID + "-number");
var available_count = {$NAVY_{$allNavies[unitEl].ID}_AVAILABLE_COUNT|default:'0'};
alert(unit.ID);
// Unit max = available count
if(element.val() > available_count)
{
completeUnitValue(element, available_count);
}
// If transport navy: Increase capacity
if({$allNavies[unitEl].ID} == 16 || {$allNavies[unitEl].ID} == 19 || {$allNavies[unitEl].ID} == 20)
{
$("#attack-max-capacity").text(getMaxCapacity());
}
});
{/section}
问题是,当我提醒任何变量(unit,element,available_count)时,我收到undefined,但是当我使用smarty {$allNavies[unitEl]}
代替变量时,一切正常。我刚刚创建了变量以使代码更具可读性。
任何人都知道为什么?
答案 0 :(得分:0)
我把你正在做的事称为“smarvascript”。我厌恶它并请求我的同事避免它。但是,我完全厌恶Smarty,所以你去了。
这一行:
var unit = {$allNavies[unitEl]};
将一些PHP值分配给JS var。
这一行:
alert(unit.ID);
让你觉得'unit'是一个具有属性的对象。您不能直接将PHP对象分配给JS对象并期望它能够正常工作......
我需要看一些你的PHP代码和数据结构来解释你应该做什么,但这可能会有所帮助
var unit = {$allNavies[unitEl]|json_encode};
或者,如果$ allNavies [unitEl]是一个数组:
var unit = {$allNavies[unitEl]|@json_encode};
如果我知道$ allNavies的结构是什么,我可能会帮助最多。
另外,我很好奇......你的{literal}标记在哪里让JS花括号不让Smarty吓坏了?
修改强>
当我被迫将Smarty注入JS时,我喜欢使用这个小技巧:
//{literal}
( function( allNavies )
{
/*
allNavies is now a JS object and you can work purely with JS in here
*/
}(
//{/literal}
{$allNavies|@json_encode}
//{literal}
) );
//{/literal}