2
<html>
<script type='text/javascript' src='jquery.js'></script>
<script type='text/javascript'>
<?php 
    // this sets variables sot session for nodeid 
    $nid = 1;//$_GET["nnid"];

    session_start(); 
    $_SESSION['sesnodid']=$nid;
?> 

var array;

$(document).ready(function (){
    $('#itemsOnPageDiv input:checkbox').click(function(event){
        var obj = [];
        $('#itemsOnPageDiv input[type=checkbox]:checked').each(function(index, value){
        obj.push($(this).attr("value"));
        alert($(this).attr("value")+" added to array");
    });
    array = JSON.stringify(obj);
    });
});



$(document).ready(function(){
    $("#cl").click(function(){
    $.post('buildUserPage.php', { array : array }, 
    function(output){
        $('#debug').html(output).show();
    });
    alert(array);
    });
});

</script>
<div id="itemsOnPageDiv">

<?php

include("hawkfunctions.php");

newPageCheckBoxBuider();

$user_page_cell_info = getUserPageCellInfo($nid);

$i = 0;

echo "<script>";
while($i < count($user_page_cell_info)){
    echo "
    alert('Clicking ".$user_page_cell_info[$i]['tag_id']."');
    \$(document).ready(function(){
    \$('#".trim($user_page_cell_info[$i]['tag_id'])."').trigger('click');
    });";
    $i++;
}
echo "</script>";
?>

</div>

<button id="cl">Save</button>

<div id = 'debug'></div>
</html>

わかった。SQL データベースから構築されたチェックボックスのリストがあります。私はphpを使用して、データベースのデータに基づいて正しい「チェックされた」ボックスを取得するjqueryを作成します。次に、このスクリプトで必要なチェックボックスを「クリック」します。「クリック」するたびに、配列にデータが入力されます。この配列には、jquery の「クリックされた」ボックスと、ユーザーがオンまたはオフにしたボックスから必要なデータが含まれます。この配列は、チェックされているボックスの変更に基づいてデータベースを変更するために、別の php スクリプトによって使用されます。

問題は次のとおりです。

正しくチェックされるはずのボックスがチェックされますが。データが入力されるはずの配列が、常に正しく入力されるわけではありません。最も顕著なのは、チェック ボックスの 1 つだけが最初にオンになっている場合、配列が空であることです。ユーザーがチェックを外してから再度チェックすると、これは修正されるようですが、明らかにこれは理想的ではありません。2 つがチェックされている場合、チェックボックスのデータの 1 つが配列に入らないことがあります。これを超える量は問題ないようです。

4

1 に答える 1

0

チェックボックスのクリックはあいまいです。うまくいくこともあれば、うまくいかないこともあります。信頼できない方法です。すでにチェックされている場合は、チェックを外します。

それを行う正しい方法は、.prop関数または.attr()を使用することです (ここでの議論を参照してください) 。

$('#".trim($user_page_cell_info[$i]['tag_id'])."').prop("checked", true)

ここにいくつかのヒントがあります。

  • ファイルを分離します。PHP / HTML / JS / CSS を一緒にすべきではない (明確にするため)

  • 私が理解していることから..チェックボックスをクリックするたびに、チェックボックスのJSONを再構築し、何もしません。したがって、3 つのボックスをクリックすると、ドキュメントを 3 回クエリして JSON を構築します。誰かが $("#cl") ボタンをクリックしたときにのみ実行する必要があります。

  • 配列に「配列」という名前を付けないでください。よりわかりやすい名前を付けてください (checkbox_array など)。

于 2012-12-13T20:10:52.973 に答える