【问题标题】:Input Checkboxes not being checked off on page load; but being checked of after using "alert()"页面加载时未选中输入复选框;但在使用“alert()”后被检查
【发布时间】: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


【解决方案1】:

这里是 catch Upon page load, some of the checkboxes must appear "checked" 确保您的脚本在创建目标的 DOM 结构时运行。然后它必须工作。

【讨论】:

  • @Hans Engel - 谢谢。我什至没有考虑到这一点。我在想“xmlhttp.readyState==4 && xmlhttp.status==200”AJAX 部分负责所有 DOM/页面加载。我错了吗?此外,我所有的代码都在“DisplayItems()”函数中;这包括任何 AJAX 调用。在函数开始后立即调用“$(document).ready()”是否有意义?还是在 AJAX 调用之后?并感谢有关放弃“each()”调用的提示。
  • @Hans Engel - 添加了“$(document).ready()”但没有运气。复选框仅在页面重新加载或使用“alert()”功能时被选中。还有其他想法吗?还有其他方法可以检查 DOM 是否已创建或加载?
猜你喜欢
  • 2013-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-27
  • 2011-03-08
  • 1970-01-01
  • 2019-07-01
相关资源
最近更新 更多