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 'clicked' 框以及用户选中或未选中的任何框所需的数据。该数组将被另一个 php 脚本用于根据选中框的更改来更改数据库。

这是问题所在:

应该正确检查的框被选中,但是。应该填充的数组不会一直正确填充。最明显的是,如果最初仅选中一个复选框,则该数组为空。用户取消选中然后再次检查似乎可以解决此问题,但显然这并不理想。有时,当检查2个复选框数据之一时,没有输入数组。任何超过这个的金额似乎都可以。

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 回答