根据一些数据,我正在用一个复选框克隆一个div,如果数据值是“True”则检查它,然后追加到目标div。
使用jquery 1.5.2
IE8在兼容模式下工作,否则无效。 FF不起作用。
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script src="scripts/jquery-1.5.2.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
// test data
var data = [{ "CB": "True" }, { "CB": "False"}];
var theClone = $("#clone").clone(true);
var temp = "";
if (data !== null) {
$.each(data, function (i, d) {
var cb = theClone.find('.cbClass');
if (d.CB === "True") {
//cb.attr("checked","checked"); //doesn't work
//cb.val(true); //doesn't work
//cb.attr("checked", true); //doesn't work
}
temp += theClone.html();
});
}
$("#target").append(temp);
});
</script>
</head>
<body>
<div id="target">
<div id="clone" class="cloneClass" style="display:none">
<div class="container">
<input type="checkbox" class="cbClass" />
</div>
</div>
</div>
</body>
</html>
答案 0 :(得分:4)
尝试这一点,似乎使用.attr("checked", "checked")
不会影响html,请尝试使用直接javascript方法setAttribute
和removeAttribute
$.each(data, function(i, d) {
var cb = theClone.find('.cbClass');
if (d.CB === "True") {
cb.get()[0].setAttribute("checked", "checked");
}
else{
cb.get()[0].removeAttribute("checked");
}
temp += theClone.html();
});
另请注意,由于您始终使用theClone
,因此需要使用removeAttribute
,因为上一次迭代修改了元素。
<强>更新强>
如果您直接处理jQuery对象,它将在IE9,chrome,FF和IE兼容模式下运行。
var temp = [];
if (data !== null) {
$.each(data, function(i, d) {
var theClone = $("#clone div").clone(true);
var cb = theClone.find('.cbClass');
if (d.CB === "True") {
cb.attr("checked", "checked");
}
temp.push(theClone);
});
}
$.each(temp, function(i, item) {
$("body").append(item);
});
<强> Code example on jsfiddle 强>
答案 1 :(得分:4)
答案 2 :(得分:2)
属性checked
的值不是“true”,而是需要checked
。这符合XHTML标准,您的页面doctype可能设置为。
<input type="checkbox" checked="checked" />
jQuery的:
$('.foo').attr('checked', 'checked');
$('.foo').removeAttr('checked')
作为旁注,您可能需要查看并重构您的JSON。根据经验,只要你有一个布尔测试,并且你的一个参数是一个布尔本身,你需要重构。
编辑:
此问题是由浏览器.innerHTML
的不同实现引起的。您还有一个问题,即您只将克隆源设置为true而从不相反,因此一旦将一个复选框设置为true,它们都将成为(这是其他已发布答案中的问题)。你需要重构这样的事情:
<script type="text/javascript">
$(function () {
// test data
var data = [{ "CB": "True" }, { "CB": "False"}];
var temp = "";
if (data !== null) {
$.each(data, function (i, d) {
var theClone = $("#clone").clone(true);
var cb = theClone.find('.cbClass');
if (d.CB === "True") {
theClone.find('input').attr("checked","checked");
}
$("#target").append(theClone);
});
}
});
</script>
警告:执行这样的重复附加会比大型集合产生性能问题。如果它超过两个,则进一步重构。 :)
答案 3 :(得分:0)
对我来说,使用.attr正在使用chrome而不是IE,而.prop似乎也有同样的问题。
最后我不情愿地选择了物理点击选项......
$('#RadioButtonIdToSelect').click();