我正在尝试使用 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 一样。就像渲染完成后的回调函数,否则......
最佳答案
问题
在 JavaScript 对象中,键始终是字符串。您的 Default
数组包含数字,但您传入的“针”(i
) 是一个字符串 ,因此 $.inArray
将始终返回 false
,。
解决方案
其中任何一项都可以:
- 使
Values
成为一个正确的数组,而不是一个由包含数字的字符串“索引”的对象。- jsfiddle 1 (注意从零开始的索引!)
- 将
Defaults
设为字符串数组。 parseInt()
将Values
键 (i
) 传递给$.inArray()
。我认为这是一个丑陋的修复。
哦,欢迎来到 Stack Overflow!
关于jquery-plugins - jQuery 模板内的 Javascript 函数无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4125058/