PHP/MySQLバックエンドでAJAXを使用して動的に生成される5つの項目のリストを持つテーブルがあります。各項目の横にINPUTチェックボックスがあります。ページの読み込み時に入力チェックボックスがオフになっていません。 "alert()"を使用した後にチェックされています
ページが読み込まれると、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によって返された値を含んでいます。 これらの値によって、どのチェックボックスがオフになっているかが決まります。
私は、この変数が空であるかどうか( "")、 が未定義かどうか、またはnullであることをテストすることで、この変数に値が設定されていることを確認しました。
ページが読み込まれると、以下のコードはすべてのチェックボックスをループし、「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"のときには が動作します。
Iは、例えば、このコードを使用した場合従って、:その後
alert("The values of the checked_items variable are: "+checked_items);
を、上記のコードは完全に動作します。
ただし、それ以外は動作しません。状態が「すべて」の場合も、状況が「選択されている」場合は もありません。
私は迷っていますが、変数が の値を失っているか、イベントがトリガーされていないと思います。しかし、私は確信していません。
誰にでもアイデアはありますか?すべてのコメント、洞察、解決策、考え方 を歓迎します。前もって感謝します!
私の最初の推測は、DOMが準備が整う前にこのコードが実行されていることです。 JSは '$(document).ready()'コールで囲まれていますか? –
また、その2番目のコードスニペットに '.each()'ループは必要ありません。 '$( 'input:checkbox')。attr'はセット内のすべての項目に適用されるので、複数回実行する必要はありません。 –