【问题标题】:Javascript function inside jQuery template is not working correctlyjQuery 模板中的 Javascript 函数无法正常工作
【发布时间】:2011-05-06 17:16:44
【问题描述】:

我正在尝试使用 jQuery.tmpl 构建复选框列表 它将列出一组项目,它们附近有一个复选框,我想以参数方式检查其中一些复选框...

模板代码为:

<ul>
{{each(i,val) Values}}
    <li>
        <input type="checkbox" {{if $.inArray(i, Default) != -1}} checked="checked"{{/if}}>
        <em>${val}</em>
    </li>
{{/each}}
</ul>

和模板定义:

<script type="text/javascript">
    $(document).ready(function() {
        $('#tpl_selector').tmpl({
            Default: [1,2],
            Values: {
                1: 'Item 1',
                2: 'Item 2',
                3: 'Item 3'
            }
        }).appendTo('#area');

    });
</script>

所以在这种情况下应该检查第 1 项和第 2 项。列表创建没有问题,但{{if $.inArray(i, Default) != -1}} checked="checked"{{/if}} 部分不起作用。

但是,当我将“i”替换为数字时,它会起作用: {{if $.inArray(1, Default) != -1}} checked="checked"{{/if}}

我一点意思都没有……你有什么建议吗?

填充复选框的另一个逻辑也可以,就像我不知道 smt.比如渲染完成后的回调函数,否则......

【问题讨论】:

    标签: jquery-plugins jquery-templates


    【解决方案1】:

    问题

    在 JavaScript 对象中,键始终是字符串。您的 Default 数组包含 数字,但您传入的“针” (i) 是一个字符串,因此 $.inArray 将始终返回 @987654328 @,。

    jsfiddle 0

    解决方案

    以下任何一种都可以:

    1. 使Values 成为一个正确的数组,而不是一个由包含数字的字符串“索引”的对象。
    2. 使Defaults 成为一个字符串数组。
    3. parseInt()Values 键 (i) 传递给 $.inArray()。我认为这是一个丑陋的修复。

    哦,欢迎来到 Stack Overflow!

    【讨论】:

    • 非常感谢您提供详细解释的答案... :) #2 是我需要的,因为密钥很重要...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-26
    • 2013-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    相关资源
    最近更新 更多