JQuery / Smarty:.keyUp中的变量未定义

时间:2011-03-11 18:36:44

标签: javascript jquery smarty undefined onkeyup

所以基本上,我在输入框的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]}代替变量时,一切正常。我刚刚创建了变量以使代码更具可读性。

任何人都知道为什么?

1 个答案:

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