2

我正在尝试使用 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. 就像渲染完成后的回调函数,否则......

4

1 回答 1

4

问题

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

jsfiddle 0

解决方案

这些中的任何一个都可以工作:

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

哦,欢迎来到 Stack Overflow!

于 2010-11-08T15:49:56.403 回答