【发布时间】:2011-07-12 21:55:29
【问题描述】:
我有一个表,其中包含 5 个项目的列表,这些项目是使用 AJAX 和 PHP/MySQL 后端动态生成的。每个项目旁边都有一个 INPUT 复选框。
页面加载时,某些复选框必须显示为“选中”,具体取决于 PHP/MySQL 返回的一组值。因此:
var checked_items = [];
// var checked_items = new Array(); // this is not working either
var GetItemsFromXML;
var SplitItems;
var XMLItemsObj = new Object;
// function...
function DisplayItems() {
CreateRObj(function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
GetItemsFromXML=xmlhttp.responseText; // returns pike delim list
SplitItems = GetItemsFromXML.split("|"); // split at pike
// status - either "all" or "selected"
XMLItemsObj.checkedstatus = SplitItems[0];
// drop last ","
SplitItems[1] = SplitItems[1].substr(0,SplitItems[1].lastIndexOf(","));
// split at comma and pass to variable
checked_items = SplitItems[1].split(",");
}
});
xmlhttp.open("POST","loaditems.php",true);
xmlhttp.send();
}
此时,变量“checked_items”包含 PHP/MySQL 返回的值。 这些值将决定选中哪个复选框。
我已经确认这个变量是通过测试来填充的,看它是否为空(“”), 未定义,或为空。
现在,一旦页面加载,下面的代码会循环遍历所有复选框并根据“XMLItemsObj.checkedstatus”状态将它们选中。如果状态为“已选择”,则只有一些被选中。如果状态为“全部”,则所有复选框都应该被选中。
这是执行此操作的代码:
if (XMLItemsObj.checkedstatus=="selected") {
for (i=0; i < checked_items.length; i++) {
$(":checkbox[value="+checked_items[i]+"]").attr("checked",true);
}
} else if (XMLItemsObj.checkedstatus=="all") {
$("input:checkbox").each(function() {
$("input:checkbox").attr("checked",true);
});
}
这就是事情开始变得奇怪的地方......
以上似乎只有在我使用“警报”功能时才有效 检查“checked_items”变量中的值。有用 当“.checkedstatus”为“all”或“selected”时。
因此,如果我要使用,例如这个代码:
alert("The values of the checked_items variable are: "+checked_items);
那么,上面的代码就可以完美运行了。
但是,否则它不起作用。既不是当状态是“全部”,也不是 当状态为“选中”时。
我很茫然,但我猜这个变量要么正在失去它 值,或未触发事件。不过,我不确定。
有人有什么想法吗?所有 cmets、见解、解决方案和想法 受欢迎的。提前致谢!
【问题讨论】:
-
我的第一个猜测是这段代码在 DOM 准备好之前就已经运行了。您的 JS 是否包含在
$(document).ready()调用中? -
另外,第二个代码 sn-p 中不需要
.each()循环。$('input:checkbox').attr将应用于集合中的每个项目,因此无需多次执行。
标签: javascript jquery ajax checkbox