1

我不确定我这样做是否完全错误,但我希望我正在尝试做的事情是可能的。

我有一个现有的 ajax jquery 函数,它保存用户的“选定”复选框并将它们存储在 $_SESSION['order_items'][index]['cheeseids'][]; 当用户去回忆这个“项目”时,我希望像以前一样“选中”相同的复选框。请参见下面的示例:

[order_items] => Array
    (
        [1] => Array
            (
                [cheeseids] => Array
                    (
                        [0] => 1
                        [1] => 2
                        [2] => 4
                    )

我的“更改/恢复”jquery 函数使用以下变量来获取索引号:

var productIDValSplitter   = (this.id).split("_");
var productIDVal       = productIDValSplitter[1]; 

我试图用来“重新选择”框 1、2、4(来自 cheeseids 数组)的函数不起作用(它在我的 jQuery 函数中)。它实际上导致整个 jQuery 代码不起作用:

<?php
foreach($_SESSION['order_items'] as $key => $value)
{
?>

var idnum = <?php echo $value['<script type="text/javascript">productIDVal</script>']['cheeseids']  ?>;
$("div.cheesebox input[type=checkbox]").eq(" + idnum + ").attr("checked", "checked");

<?php
}
?>

JS输出:

var idnum = ;
$("div.cheesebox input[type=checkbox]").eq(" + idnum + ").attr("checked", "checked");

var idnum = ;
$("div.cheesebox input[type=checkbox]").eq(" + idnum + ").attr("checked", "checked");

我也在添加 PHP 的整个 JS/jQuery 函数:

$("#basketItemsWrap li img.change").live("click", function(event) {
        var productIDValSplitter   = (this.id).split("_");
        var productIDVal       = productIDValSplitter[1];  
        $("#notificationsLoader").show();
        $.ajax({  
        type: "POST",  
        url: "includes/ajax/functions.php",
        data: { productID: productIDVal, action: "deleteFromBasket"},  
        success: function(theResponse) {
          $("div#order_qty input").attr('value', $("#order_" + productIDVal + " #order_qty").text());
          $("div#order_listprice input#price1").attr('value', $("#order_" + productIDVal + " #order_listprice").text().replace("$", ""));
          $("div#order_price input#discprice1").attr('value', $("#order_" + productIDVal + " #order_price").text().replace("$", ""));
          $("div#order_price input#itemprice1").attr('value', $("#order_" + productIDVal + " #order_itemprice").text().replace("$", ""));


          //The following functions restore the order details in the select menus, checkboxes, and radio buttons
          //Restores the item selected
          for(var i = 0; i < $("#item1 option").size(); i++)
          {
            if($("#order_" + productIDVal + " #order_item").text() == $("#item1 option:eq("+i+")").text())
            {
              $("#item1 option:eq("+i+")").attr("selected", "selected");
              //$("#item1").val(i);
              CalcPrice(1);
            }
          }

          //Restores the promotion selected
          for(var i = 0; i < $("#promo1 option").size(); i++)
          {
            if($("#order_" + productIDVal + " #order_promo").text() == $("#promo1 option:eq("+i+")").text())
            {
              $("#promo1 option:eq("+i+")").attr("selected", "selected");
              //$("#promo1").val(i);
              CalcPromo(1);
            }
          }

            <?php foreach($_SESSION['order_items'][1]['cheeseids'] as $id): ?>
             $("div.cheesebox input[type=checkbox]#<?php echo $id;?>").attr("checked", "checked");
          <?php endforeach; ?>
          //Restores the cheese options selected



          // $('div.cheesebox input[type=checkbox]').size(); i++)

          //$('div.cheesebox input[type=checkbox]').eq(1).attr('checked', 'checked');


          $("#order_" + productIDVal).hide("slow",  function() {$(this).remove();Calc();});
          $("#notificationsLoader").hide();
        }  
        }); 
      });

生成复选框的 PHP/HTML 代码:

<?php
        //Display all "cheese" options in a checkbox group
          foreach($_SESSION['ingr_cheese'] as $key => $value)
          {
              echo "<div class=\"cheesebox\" style=\"float:left; width:175px; margin-bottom:7px;\">";
              echo "<input type=\"checkbox\" name=\"cheese1\" id=\"cheese1\" class=\"cheeseCheck\" value=\"".$key."\">&nbsp;<label for=\"cheese1\">".$value['cheese']."</label></br>";
              echo "</div>";
          }
        ?>
4

1 回答 1

0

如果您列出的数组已经是数组中内容的准确表示$_SESSION,那么此代码应该可以满足您的需求。

<?php foreach($_SESSION['order_items'][1]['cheeseids'] as $id): ?>
    $("div.cheesebox input[type=checkbox]#<?php echo $id;?>").attr("checked", "checked");
<?php endfor; ?>

这应该生成如下所示的 javascript:

    $("div.cheesebox input[type=checkbox]#1").attr("checked", "checked");
    $("div.cheesebox input[type=checkbox]#2").attr("checked", "checked");
    $("div.cheesebox input[type=checkbox]#4").attr("checked", "checked");

此代码假定您的复选框标记看起来(有点)像这样:

<div class=".cheesebox">
    <input type="checkbox" id="1">
    <input type="checkbox" id="2">
    <input type="checkbox" id="3">
    <input type="checkbox" id="4">
</div>

我验证了选择器语法,但如果这不起作用,那么我可能对复选框的标记做出了错误的假设。如果这还不足以为您指明正确的方向,请粘贴更多的 html,我将再试一次。

于 2013-03-19T23:02:44.633 回答