2011-07-12 6 views
0

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); 

を、上記のコードは完全に動作します。

ただし、それ以外は動作しません。状態が「すべて」の場合も、状況が「選択されている」場合は もありません。

私は迷っていますが、変数が の値を失っているか、イベントがトリガーされていないと思います。しかし、私は確信していません。

誰にでもアイデアはありますか?すべてのコメント、洞察、解決策、考え方 を歓迎します。前もって感謝します!

+0

私の最初の推測は、DOMが準備が整う前にこのコードが実行されていることです。 JSは '$(document).ready()'コールで囲まれていますか? –

+1

また、その2番目のコードスニペットに '.each()'ループは必要ありません。 '$( 'input:checkbox')。attr'はセット内のすべての項目に適用されるので、複数回実行する必要はありません。 –

答えて

0

ここにキャッチUpon page load, some of the checkboxes must appear "checked"ターゲットのDOM構造が作成されたときにスクリプトが実行されるようにします。その後、それは動作する必要があります。

+0

@Hans Engel - ありがとう。私はそれを考慮しなかった。私は、 "xmlhttp.readyState == 4 && xmlhttp.status == 200" AJAXの部分がすべてのDOM /ページの読み込みを処理したと考えていました。これは間違っていますか?また、私のすべてのコードは "DisplayItems()"関数内にあります。これにはAJAX呼び出しが含まれます。関数の開始直後に "$(document).ready()"コールを置くことは意味がありますか?またはAJAXコール後?そして、「each()」コールを削除することについてのヒントをありがとう。 –

+0

@Hans Engel - "$(document).ready()"を追加しましたが、運はありません。チェックボックスは、ページのリロード時または "alert()"機能を使用しているときにのみチェックされます。他のアイデア?DOMが作成またはロードされたことを確認する別の方法はありますか? –

関連する問題